IE下javascript cookie path设置Bug

本文探讨了一个存在于Internet Explorer浏览器中的JavaScript设置Cookie的路径问题。该问题表现为在特定路径下设置的Cookie无法被document.cookie访问,尽管这些Cookie能正确发送至服务器。文章提供了规避此问题的方法,并讨论了可能带来的副作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

手上一个广告项目,在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
同样的问题在罪与罚 的博客上也有描述,而且博主联系过微软IEBLOG 的Eric。得到的回复是:

You have uncovered an IE bug where cookies that are set with a path that contains a filename (e.g. /page.htm) are not accessible to the document.cookie function, although they are correctly sent to the server in the HTTP header. This has been broken for at least 10 years and unfortunately probably will not be fixed in IE8.

Thanks,

-Eric

一个存在10年的Bug。。。而且IE8也不会修复,实在是无语。

需求是cookie值只对当前页面有效,没办法只好用替代方案,看代码:

 

//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.html
则cookie名为test.html,有效路径为/test/
这样也可以做到同一个js部署在每个页面上能读到只对当前URL有效的cookie值。代价是当用户在同一级目录下访问很多页面时会导致cookie值不 断增大。结果是当前路径下的每个http请求都带很长一段的cookie,直接导致服务器接收客户端request的header长度增长,流量增长的同 时服务器负担也变重。而且根据 RFC 2109 的定义Cookie也有长度和个数限制,IE允许的最大 Cookie 长度是 4096 字节,允许50个 Cookie 名-值对。如果要突破50个名-值对的限制,可以在一个名-值使用Cookie字典的方式保存更多的Cookie变量。

 

 

http://blog.seateng.cn/archives/2009/03/ie-javascript-cookie-path-bug.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值