- ベストアンサー
クッキーを発行するドメイン名を指定する方法
function getCookie(keyname){ var tmp = document.cookie + ";"; var index1 = tmp.indexOf(keyname, 0); if(index1 != -1){ tmp = tmp.substring(index1, tmp.length); var index2 = tmp.indexOf("=", 0) + 1; var index3 = tmp.indexOf(";", index2); return(unescape(tmp.substring(index2, index3))); } } function setCookie(keyname, val){ var tmp = keyname + "=" + escape(val) + ";"; var gmt = new Date(); gmt.setTime(gmt.getTime() + 9*60*60*1000 + 24*60*60*1000*365); tmp += "expires=" + gmt.toGMTString(); document.cookie = tmp; } function backFunc(){history.back();} function backEntry(){window.location = "rank2.cgi?mode=show&rank=$IN{'rank'}";} function backOperate(){document.form1.submit();} function startFunc(){ if("$FORM{'savecookie'}" != "save"){return;} if(getCookie("dakenId") != "$FORM{'para3'}"){setCookie("dakenId", "$FORM{'para3'}");} if(getCookie("dakenPass") != "$FORM{'para4'}"){setCookie("dakenPass", "$FORM{'para4'}");} } 現在は、http://ドメイン.com/cgi-bin/abc/ このような階層にクッキーが保存されています。 これを、http://ドメイン.com/cgi-bin/に保存するには、上記スクリプトをどのように変更すればよろしいのでしょうか。 発行したクッキーの参照可能なサイト (URL) として domain 値と path 値があるそうですが、自分なりにここ二日間勉強し続けましたが、クッキーについての知識はゼロに近いため、どうしても自力では解決できそうにありません。 どなたかご存知のかた、何卒宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
申し訳無いです。 カテゴリをPerlと勘違いしていました。 しかし、JavaScriptでも話は一緒で、 tmp += "; path=/cgi-bin/" を付け加えることになります。 # この質問、実際には、Cookieのpath名を指定する方法ですね。 # ちなみに、本当にドメイン名を変更する場合は、ANo.1の通り # サードパーティーのCookieとして、IE6に弾かれる可能性が高いです。 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpisdk/dhtml/references/properties/cookie.asp?FRAME=true#cookie
その他の回答 (2)
- onosuke
- ベストアンサー率67% (310/456)
「クッキーについての知識はゼロ」なら検索して、その知識を習得しましょう。HTTPは簡単なプロトコルなので、HTTPプロトコル上のCookieの使い方を押さえた方が楽です。 一度、正体不明のdocumentインスタンスから離れましょう。 (質問文からはdocumentインスタンスのクラス定義が読み取れませんよ) まず、参考URLを参照してください。 質問の目的を果たすには、CGIからブラウザに、 Set-Cookie: name=value; expire=XXXXXX; path=/cgi-bin/ というSet-Cookieヘッダが送信されれば、OKということが分かります。 自分のプログラムを振り返れば、 tmp += "; path=/cgi-bin/" を付け加えれば、目的を果たせそうな気がしませんか?
補足
var index1 = tmp.indexOf(keyname, 0);の次の行に tmp += "path=/cgi-bin/;" を追加しましたところ、指定された場所にクッキーが保存されました。 後は、この場所からクッキーをゲットするだけなのですが、どうもうまくいきません。ご存知の方がおられましたら、ご指導のほど宜しくお願い申し上げます。
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
ドメインを指定したクッキーを保存することは出来ません。 古い情報では出来るとありますが、現在はセキュリティー対策として出来なくなっています。 IDを1つにしてCSVにしたり、区切り文字で分割するようにしてみてはいかがでしょうか。
お礼
ご回答ありがとうございます。 申し訳ございません。読み直してみましたら題名と質問内容がおかしかったようです。別のドメインに記録することは不可能だということは調べてみてわかったのですが、上記スクリプトで上階層で保存させて読み込む方法がわかりません。宜しくお願いいたします。
お礼
ご回答ありがとうございます。 ご紹介していただいたサイトを含め、数多くの解説サイトを参考に数日間試行錯誤しておりましたが、どうしても上記スクリプトで上階層で保存させて読み込みするとができません。本来は一から勉強すればいいことなのですが、このスクリプトの修正は緊急を要するため困っております。 tmp += "; path=/cgi-bin/" は、function setCookie(keyname, val){ の下に追加すればいいのでしょうか。やってみましたが、上手く保存されておりませんでした。大変お手数をおかけいたしますが、上記スクリプトでの改造方法をお教えいただけませんでしょうか。私が利用しているスクリプトでは、上記cookie情報の一部がかけただけで正常に動作しないようにできております。どうぞ宜しくお願い申し上げます。
補足
あと、これはPerlスクリプト上に書かれておりますので、 全ての文は print qq| と \n|;の間に書かれております。