IEの下でjavascript cookie path設定Bug


前の広告項目を手にして、Firefoxの下で順調にテストに合格しました.JSコードはIEと互換性があると自信しています.FFテスト後、直ちにCSテストを行いました.結果、CSフィードバックに問題があると言われました.調べてみると、JavascriptがCookieを設定した時のpathと関係があることが分かりました.IE下のCookie種は、/またはURLの所在経路において正常であり、Cookie値作用ドメインが現在のURLにある場合、IE下のjavascriptは設定されたCookie値を取得できない.
次のデモコードを見てください.
 
var cookie_name = "name";
var cookie_value = "value";
expires = new Date();
expires.setTime(expires.getTime() + 86400 * 1000);

//  Bug document.cookie    cookie_name 
document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)
		+ "; expires=" + expires.toGMTString() + "; path="
		+ window.location.pathname;
//   
document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)
		+ "; expires=" + expires.toGMTString() + "; path=/test/";
//   
document.cookie = "cookie_name=" + encodeURIComponent(cookie_value)
		+ "; expires=" + expires.toGMTString() + "; path=/";
 
IEのBugを疑って、googleでキーワードを検索しました.ie javascript cookie path bugと同じ問題は罪と罰のブログにも記述されています.そして、博主はマイクロソフトIEブログのエリックに連絡しました.得られた返事は:
You have uncovered an IE bug whehere cookies that arare set with a path th th a a contains a filename(e.g./page.hm)art accessible to the document.co co function、although they therythererectlysentthethethethethererererereretttttthethethetherererererererereretttttthethethethethethethethethethethethetherererererereaaaaaaaaaaaaaaaaaaaaaathethethethethethethethethethetherererererererererererererererererein IE 8.
Thanks、
-エリック
一つの存在は10年のBugです.それにIE 8も修復できないので、本当に言葉がないです.
需要はクッキーの値が現在のページにしか有効ではないので、仕方なく代替案を使ってコードを見ます.
 
//IE Cookie Bug     
var cookie_path = window.location.pathname;
var cookie_name = encodeURIComponent(cookie_path.substring(cookie_path
		.lastIndexOf('/') + 1));
cookie_path = cookie_path.substring(0, cookie_path.lastIndexOf('/') + 1);
var cookie_value = "value";
expires = new Date();
expires.setTime(expires.getTime() + 86400 * 1000);

document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)
		+ "; expires=" + expires.toGMTString() + "; path=" + cookie_path;
 代替案は、各ページのURLファイルに基づいて、名来でCookie名を作成し、有効範囲は現在のページを経由している.例えば:urlイコール/test/test.はcookie名をtestといいます.有効経路は/test/このようにして、各ページに同じjs配置をしても、現在のURLだけに有効なクッキー値を読むことができます.コストは、ユーザが同じレベルのディレクトリの下で多くのページにアクセスすると、クッキー値がどんどん増加することになる.その結果、現在の経路の各http要求は、クライアントrequestを受信するサーバのheader長が直接的に増加し、トラフィックが増加するとともに、サーバの負担も重くなる.また、RFC 2109の定義に従って、Cookieも長さと個数に制限があり、IEによって許可される最大のCookie長は4096バイト、50個許可 Cookie名−値ペアである.50個の名前-値ペアの制限を突破する場合、1つの名前-値はCookie辞書を使用して、より多くのCookie変数を保存することができます.
 
 
http://blog.seateng.cn/archives/2009/03/ie-javascript-cookie-path-bug.html