看下面演示代碼,注意下面的path 區別:javascript
- var cookie_name = "name";
- var cookie_value = "value";
- expires = new Date();
- expires.setTime(expires.getTime() + 86400 * 1000);
-
-
- 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=/";
得出結果:cookie值只對當前頁面有效。如今不知道html
替代方案,代碼:java
-
- 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.html
則cookie名爲test.html,有效路徑爲/test/
這樣也能夠作到同一個js部署在每一個頁面上能讀到只對當前URL有效的cookie值。代價是當用戶在同一級目錄下訪問不少頁面時會致使cookie值不 斷增大。結果是當前路徑下的每一個http請求都帶很長一段的cookie,直接致使服務器接收客戶端request的header長度增加,流量增加的同 時服務器負擔也變重。並且根據 RFC 2109的定義Cookie也有長度和個數限制,IE容許的最大 Cookie 長度是 4096 字節,容許50個Cookie 名-值對。若是要突破50個名-值對的限制,能夠在一個名-值使用Cookie字典的方式保存更多的Cookie變量。服務器