CGI-BBS > SO−HO > ショッピングバスケット > 簡易ショッピングバスケットでCookie のドメイン値を設定したい


カレッヂ
カレッヂ


質問者 さかな  投稿日 10/26(金) 20:25:25
現在簡易ショッピングバスケットを利用しています。
設置しているレンタルサーバーは、仕様でwww を省略した形のURL でも
ページが閲覧できるようになっています。
ところがwwwを省略して閲覧した際に、バスケットの中身を削除できなかったり
発注をしたあとでも商品が残ってしまうという問題が起こりました。

http://www.hoge.co.jp/shop/shop.html からでも
http://hoge.co.jp/shop/shop.html からでも同じように動作させたいのです。

Cookie のドメイン値をwww.hoge.co.jp と設定すれば解決するのでは?という
考えに至りましたが、具体的にどう記述すればよいのかわかりません。
または他になにかよい回避策はありますでしょうか?
回答者 呑兵衛@大阪  [削除]  投稿日 10/27(土) 01:17:53
先にお答えから。
cookie に domain を指定していないため、デフォルトで
www.hoge.co.jp がドメインになります。これを回避するには、
domain に www. や ssl. などを取り除いた hoge.co.jp を
path に /shop/ を指定します。

sub remove と sub regist にあるクッキーを送信する部分の
print "Set-Cookie: $cookie_name=$GOODS[$goods_next];\n";

print "Set-Cookie: $cookie_name=$GOODS[$goods_next]; domain=hoge.co.jp;\n";
とします。

サーバーは、$ENV{'HTTP_COOKIE'} で拾ったユーザー側情報を、
domain については、 jp とか uk などの ccTLD (カントリーコードトップレベルドメイン)や、
com net org などの gTLG (generic Top Level Domain) から左に向かって読み始め、
ドットを数えつつ、一番左にあるサブドメイン名までを有効な domain と認識します。
それより左側に何が記述していてもすべてOK、OKよ〜〜です。
また、 path =/; にすると、/ の右側以降に何のディレクトリが来ても、クッキーは
すべてのディレクトリやファイルにおいて有効になります。
どこまで一致するかを見ているわけです。

逆に言えば domain=www.hoge.co.jp にすれば http://hoge.co.jp はクッキーに見放され、
path=/shop/ とすると www.hoge.co.jp/cgi-bin/ は無視されます。
どちらも指定がなければ、www.hoge.co.jp と / が有効になり、
今回のようなご質問が生じることになります。

SSLを利用することになるとき、クッキー情報の解釈が重要になる場合があるため
余計に回答しました。
質問者 さかな  [削除]  投稿日 10/27(土) 03:13:08
丁寧なご説明ありがとうございます。良く理解できました。
該当箇所を修正してテストしてみましたところ、うまく
動作するようになりました。

それから注文後にも商品が残ってしまっていたのですが
webform.cgi の
{ print "Set-Cookie: CARGO_$j=removed;\n"; }

{ print "Set-Cookie: CARGO_$j=removed; domain=hoge.co.jp;\n"; }
とすることで解決できました。

どうもありがとうございました。

返信(回答)する


Web裏技