重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

所々疑問があるので、よければご教授願います。
まずこのサイトを見てもらえればと思います。http://ash.jp/~hasimoto/zakki/new_jsck.htm
弄ってるコードはここのを参考にしていて、同じ状態なんですが、以下疑問点です。

(1)「ckary = document.cookie.split("; ");」と「ckary = ckstr.split("%00");」の違いはなんなんでしょうか?
前者が「配列の各要素に代入」とありますが、その後のループ処理を除いてunescape変換させたとき、
配列一つしか表示されない事・逆に("%00")の場合は三列表示される事に違和感を感じるのですが、どういう事なんでしょうか?。

(2)1から続きます。名前を抜くループ処理を除いたとき、配列1のしか名前が出ないのは何故なんでしょうか?
これだと各要素に対してする処理の必要性・「name=文字列」「name2=文字列2」のイメージが混乱するのですがどういう事なんでしょうか?

(3)「exp.setTime(exp.getTime()+1000*60*60*24*1);」の最後尾の1の必要性

(4)「if (ckary[i].substr(0,8)・・・break;」のbreak;の必要性

以上上から疑問度の高い順です。
どれかの点を教えてもらうだけでも嬉しいので、回答よろしくお願いします。

A 回答 (2件)

(1)


「;」は通常クッキーで利用されている区切り文字、
「%00」は、このスクリプトの作者が独自に用いているサブの区切り文字

普通なら、 usr=○○○;eml=◇◇◇;url=△△△; とでもするところを、
ASH_jsc=○○○%00◇◇◇%00△△△;
みたいにして一つのデータとして保存している。
(なぜそうしているのかは不明) 

(2)
>名前を抜くループ処理を除いたとき
というのが、何を意味しているのかわかりません。

(3)
この計算の場合は「1」はあってもなくても同じ。
1週間なら、1のところが7になって、 1000*60*60*24*7 となるので
1日ということを明示しているのだろう。
1000*60*60*24 も、86400000 と書いてもよいけれど乗算形式で
書いてある方がわかりやすかったりするのと同じ。

(4)
探しているデータが、「ASH_jsc=」に格納されているのだから、見つけたところでループを抜け出している。(抜けないと、違う値になってしまう)
全部を調べても見つからない場合も、最終的にはループを抜けるので、ループを抜けたところで、見つかったのか見つからなかったのかを判定する必要があるはずだが、サンプルのコードでは省略されている。
(何らかの理由でクッキーが破壊されたりしていた場合、予定するデータと違う値が混入したり、エラーになったりする可能性がある。)

(おまけ)
toGMTString() →  toUTCString()
escape → encodeURI() 、 encodeURIComponent() とか
    • good
    • 0
この回答へのお礼

詳細にありがとうございます、とても参考になりました。
おまけの情報含めさっそく活用してみようと思います。
回答ありがとうございました。

お礼日時:2009/09/08 19:59

(1) %00 は区切り記号に使わないほうがいいよ。

ついでに (un)escape は廃止されてる。∴参照先はあまり参考にしないほうがよいのでは?

(3) 期限が 1日であることを強調するためでしょう。
ついでに expires=" + exp.toGMTString(); は非推奨とされ、Date#toUTCString(); が推奨されています。

(4) while を抜けるためのもの。

参考URL:http://www.studyinghttp.net/cookies
    • good
    • 0
この回答へのお礼

回答ありがとうございます、参考になります。
そう言われれば参照先の情報1999年と古いですね、他のも当たってみようかと思います。
参考URLもありがとうございました。

お礼日時:2009/09/08 19:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!