`
conkeyn
  • 浏览: 1529178 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

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
同样的问题在罪与罚 的博客上也有描述,而且博主联系过微软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

 

分享到:
评论
4 楼 showrock 2010-07-04  
牛。。。。
3 楼 mfkdzhou 2009-12-01  
我现在也遇到这个问题啊。。。最恶心的是我现在不支持 path=/ 我用的IE6 楼主有解决方案不?
2 楼 kaipingk 2009-11-05  
我这几天也遇到这个问题! IE真烂啊。。。。
1 楼 dfx306956205 2009-10-15  
谢谢,楼主,楼主的文章将被载入史册~!~~~~

相关推荐

    cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击.zip_js设置cookie值

    当一个Cookie被设置为HttpOnly时,JavaScript无法通过Document.cookie API或其他方式访问到这个Cookie。这样一来,即使网页中存在XSS漏洞,恶意脚本也无法窃取到包含敏感信息的Cookie,从而降低了攻击者盗取用户身份...

    javascript cookie 操作框架 XCookie

    5. **设置Cookie的安全性和HTTPOnly属性**:为了增强安全性,XCookie支持设置cookie的HTTPOnly属性,防止JavaScript脚本被恶意篡改。同时,可以标记为安全cookie,确保它们仅通过HTTPS传输。 6. **过期时间处理**:...

    javascript cookie

    这个文件包含了javascript对浏览器cookie文件的设置、读、写、删除四个函数,非常好用。

    IE的JavaScript调试工具

    JavaScript是Web开发中不可或缺的一部分,而作为曾经主流的浏览器,Internet Explorer(IE)提供了自己的JavaScript调试工具,使得开发者能够有效地追踪和解决代码中的问题。在IE的JavaScript调试工具中,有多个关键...

    C#和javascript操作cookie

    在ASP.NET环境中,结合C#和JavaScript,我们可以实现跨语言的Cookie操作,以便于实现用户会话管理、个性化设置等功能。本文将详细探讨如何在C#后端和JavaScript前端中操作Cookie。 首先,C#在ASP.NET中处理Cookie...

    cookie-banner, 基于JavaScript的cookie信息横幅,适用于欧盟 cookie.zip

    cookie-banner, 基于JavaScript的cookie信息横幅,适用于欧盟 cookie Cookie标题 Cookie横幅是确保你遵守欧盟Cookie规则的一种非常简单的方法。 只要从你的页面引用 cookiebanner.min.js 脚本就完成了。Cookie ...

    JavaScript数据存储 Cookie篇

    在JavaScript中,我们可以通过`document.cookie`属性来读取和设置Cookie。然而,这个属性并不直接支持设置多个参数,所以通常需要自定义函数来处理: ```javascript var CookieUtil = { set: function(name, ...

    cookiejs一个用于处理浏览器cookie的简单轻量级JavaScriptAPI

    Cookie.js是一个专为JavaScript开发者设计的轻量级库,主要用于管理和操作浏览器中的cookie。这个库的主要优点是它的简洁性和低资源占用,使得它成为处理cookie的理想选择,尤其适用于那些对性能和加载速度有较高...

    JD cookie一键获取脚本,基于JavaScript

    jdcookie.js下载 JD cookie一键获取脚本,基于JavaScript jdcookie.js下载 JD cookie一键获取脚本,基于JavaScript jdcookie.js下载 JD cookie一键获取脚本,基于JavaScript jdcookie.js下载 JD cookie一键获取脚本...

    jquery 设置cookie、删除cookie、获取cookie

    // 设置特定域名下的 Cookie $.cookie('name', 'dumplings', { domain: 'qq.com' }); // 设置特定路径下的 Cookie $.cookie('name', 'dumplings', { domain: 'qq.com', path: '/' }); ``` #### 四、获取 Cookie ...

    cookie设置httpOnly和secure属性实现及问题

    ### Cookie设置httpOnly和secure属性实现及问题 #### 一、引言 在现代Web开发中,保护用户的隐私和数据安全至关重要。其中一种常见的做法就是通过设置Cookie的`httpOnly`和`secure`属性来增强安全性。这两个属性...

    cookie--javascript记录用户之前是否访问本页面

    7. **HTTPOnly**:如果设置,防止JavaScript通过`document.cookie`属性访问该Cookie,增加安全性。 JavaScript中操作Cookie的方法主要有: 1. **创建Cookie**:使用`document.cookie`属性设置一个包含所有属性的...

    ie不执行javascript修复

    ie不执行javascript修复ie不执行javascript修复ie不执行javascript修复 当IE不能正常运行时,打开该工具就可以了,自动修复

    使用JavaScript实现Cookie的增删改查操作

    JavaScript作为浏览器端的主要脚本语言,提供了操作Cookie的功能。本文将详细介绍如何使用JavaScript实现Cookie的增删改查操作。 首先,理解Cookie的基本概念是必要的。Cookie由服务器端设置,并发送到用户的浏览器...

    JavaScript环境中网络课程开发之cookie技术应用研究.pdf

    JavaScript可以通过设置document.cookie的属性值来保存Cookie,并可以通过读取Cookie来获取保存的信息。 六、结论 本文详细讨论了Cookie技术在JavaScript环境中的应用,包括Cookie的定义、Cookie的保存方式、利用...

    JavaScript入门之事件、cookie、定时等

    JavaScript作为网页开发中最广泛使用的脚本语言之一,其事件处理机制、cookie的应用、定时任务的执行是前端开发的重要知识点,对于初学者来说,理解这些概念对于学习JavaScript至关重要。 ### 事件 (Event) 在Web...

    IIS环境下和阿帕奇环境下 js的Cookie使用方法

    这篇教程将深入探讨在IIS(Internet Information Services)和Apache两种不同的Web服务器环境下,如何使用JavaScript来操作Cookie。 **一、Cookie的基本概念** Cookie是由服务器端创建,并发送到客户端浏览器的一...

    IE8的JavaScript点击事件(onclick)不兼容的解决方法

    在标准模式下,IE8及以下版本不支持通过`setAttribute`直接为元素添加事件监听器,这与现代浏览器如Chrome和Firefox存在差异。为了确保兼容性,通常推荐使用`addEventListener`方法为元素添加事件监听器,但由于IE8...

    iebug总结jar包

    "iebug总结jar包"是一个专门针对这些问题的资源集合,它包含了处理IE bug的相关资料,特别是针对IE6的解决方案。以下是基于这个主题的详细知识点: 1. **IE6的渲染引擎**:IE6使用的是Trident渲染引擎,它与现代...

    javascript 中Cookie读、写与删除操作.docx

    在JavaScript中,可以通过`document.cookie`属性来设置Cookie。基本格式如下: ```javascript document.cookie = "name=value; expires=expiration_date; path=path; domain=domain; secure"; ``` - `name`: ...

Global site tag (gtag.js) - Google Analytics