javascriptのクッキーの質問です。

参考書を見て以下の感じでクッキーを取得しています。
サイト全体にクッキーを反映させるにはどうすればいいでしょう?
pathの変更をいろいろ試したのですが解決できなかったので質問します。
よろしくお願いします。

//Cookie
function setCookie(name, value, expires, domain, path, secure) {
var cookieStr = name + "=" + encodeURIComponent(value);
cookieStr += expires ? " ;expires=" + expires.toGMTString() : "";
cookieStr += domain ? " ;domain=" + domain : "";
cookieStr += path ? " ;path=" + path : "";
cookieStr += secure ? " ;secure" : "";
document.cookie = cookieStr;
}
expires = new Date();
expires.setDate(expires.getDate() + 20);
setCookie("check", ret, expires);
setCookie("check2", ret2, expires);
setCookie("year", document.form.y.value, expires);
setCookie("month", document.form.m.value, expires);
setCookie("day", document.form.d.value, expires);
}

回答の条件
  • 1人5回まで
  • 登録:2010/01/16 23:58:53
  • 終了:2010/01/19 12:48:12

回答(3件)

id:MD7 No.1

MD7回答回数5ベストアンサー獲得回数02010/01/17 01:52:35

http://www.alc.co.jp/alcshop/help/cart/settei.html

ここに詳細があります。

もちろん、JavaScriptも詳しく書かれています。

id:tontonpokopoko

JavaScriptの設定ではなく、WEB制作のついての質問ですが・・

2010/01/17 02:12:19
id:km1967 No.2

km1967回答回数541ベストアンサー獲得回数402010/01/17 10:53:40

ポイント10pt

>サイト全体にクッキーを反映させる

意味が分からない。

サイト全体からCookieを取得したいということか?

そのサイトの全ページが同じドメインに属しているなら、どこからでもCookie

取得できるのだが。

id:tontonpokopoko

質問が悪くてすいません。同じドメインです。

上記の方法からクッキーを取得した場合、

例、setCookie("check", ret, expires);

パスを省略しているので、ウェブページがあるパスを指定することになるのではないでしょうか?

その場合はその階層以上のディレクトリには反映されないのでは?

2010/01/17 12:23:46
id:y-kawaz No.3

y-kawaz回答回数1420ベストアンサー獲得回数2252010/01/17 13:13:48

ポイント100pt

同じドメイン上であれば path=/ を付けておけば全ページで利用可能ですよ。


パスを省略したら現在のURL中のパスが指定されたのと同じと考えて良いですがファイル名まで含めてのパスになります。なので、

  • /foo/ で setCookie('abc', 123) したら /foo/bar.html や /foo/bar2/baz.html でもクッキーabcの値が取得できます。
  • ですが、/foo/page1.html で setCookie('xyz', 123) をした場合は、/foo/bar.html や /foo/bar2/baz.html ではクッキーxyzの値は取得できません。

また /foo/ と /boo/bar.html でそれぞれ同名のクッキー値が保存された場合はより限定的な値が取得されるので気をつけましょう。

  • /foo/ で setCookie('a', 1)、/foo/bar.html で setCookie('a', 2) をすると、/foo/paga1.html や /foo/bar2/baz.html では1が取得できますが、/foo/baz.html では2が取得されます。
  • 同名のクッキーが複数パスに保存されてしまった場合は各パスを指定してクッキーを消してやらなければ行けなくなってしまうので大変なので気をつけましょう。そういう状態になってしまうとテスト中にも想定外の挙動に見えて混乱する羽目になると思います。
id:tontonpokopoko

y-kawazさん、回答をありがとうございます。

まさしく的を射てる回答で、上記のことを質問していました。

path=/ とすればいいのはわかっているのですが、

参考書にあった使いまわしのクッキー取得法(それが上記の質問に書いたもの)で、

この取得法から、パスを求める方法を知りたいのです。

expires=new Date();

expires.seDate(expire.getDate()+30);//保存30日

setCookie('xyz', 123, expires, ここにパスを書く方法);

普通に'/' とか / と書いてもダメですよね?

よろしくお願いします。

2010/01/18 08:45:01
  • id:rouge_2008
    サイト内のすべてのページが、同じドメイン(サブドメインも含む)なのですか?
    もし同じ場合は、反映されるページと反映されないページの違いで何か気がついたことがあれば教えてください。
    ※質問文に記載したjsは一部だと思いますが、単独のjsファイルとして保存して、他のページから読み込んでいるのでしょうか?
  • id:tontonpokopoko
    コメントをありがとうございます。
    質問が悪くて申し訳ありません。サイト内は同じドメインです。

    階層の下で取得したクッキーを、
    上位(同じ階層でも違う場所)のディレクトリにも読み込みを可能にしたいということです。
    現在では、同じ情報名で値が2つ存在しています。

    記載したjsは、同じサイト内の単独ファイルで他のページから読み取っています。
  • id:n85
    セッションのほうが適しているのかも
  • id:rouge_2008
    処理が以下のようになっていますので、呼び出す時は「setCookie('xyz', 123, expires, "", "/");」で大丈夫です。
    次のように引数の1番目がクッキーの名前、2番目が値、3番目が有効期限、4番目がドメイン、5番目がパスとなっていますので、5番目にパスを指定します。(※ドメインは空欄にしたので、自動で設定されます。サイト内のページがすべて同じドメイン内にあるのでしたら、これで大丈夫だと思います。)

    function setCookie(name, value, expires, domain, path, secure) {


    ※追記
    「現在では、同じ情報名で値が2つ存在しています。」との事ですが、y-kawazさんが回答されたように、より近いパスのクッキーの値が反映されますので、一旦クッキーを削除してから確認してください。
  • id:tontonpokopoko
    rouge_2008さん、コメントをありがとうございます。
    なるほど、ドメインは空欄("")としなければならなかったのですね。
    そこを飛ばしてしまったので、"/" としても正常に動作しませんでした。

    今、試してみたところ、ちゃんと保持されていました。
    コメント欄なので、お礼ができなくて申し訳ありません。

    本当に助かりました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません