IE下javascript cookie path设置Bug

项目中设置完cookie,在Firefox下顺利测试通过。IE测试出现问题,经定位发现是Javascript设置 Cookie 时的 path 有问题。IE下Cookie设置在 /或者URL所在路径时正常,如果Cookie值作用域在当前URL下,则IE下javascript 无法获取到设置的Cookie值。

看下面演示代码,注意下面的path 区别:

  1. var cookie_name = "name";
  2. var cookie_value = "value";
  3. expires = new Date();
  4. expires.setTime(expires.getTime() + 86400 * 1000);
  5. // 有Bug document.cookie无法读取到cookie_name值
  6. document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)
  7. + "; expires=" + expires.toGMTString() + "; path="
  8. + window.location.pathname;
  9. // 正常
  10. document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)
  11. + "; expires=" + expires.toGMTString() + "; path=/test/";
  12. // 正常
  13. document.cookie = "cookie_name=" + encodeURIComponent(cookie_value)
  14. + "; expires=" + expires.toGMTString() + "; path=/";

得出结果:cookie值只对当前页面有效。现在不知道

替代方案,代码:

  1. //IE Cookie Bug 替代方案
  2. var cookie_path = window.location.pathname;
  3. var cookie_name = encodeURIComponent(cookie_path.substring(cookie_path
  4. .lastIndexOf(‘/‘) + 1));
  5. cookie_path = cookie_path.substring(0, cookie_path.lastIndexOf(‘/‘) + 1);
  6. var cookie_value = "value";
  7. expires = new Date();
  8. expires.setTime(expires.getTime() + 86400 * 1000);
  9. document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)
  10. + "; 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://conkeyn.iteye.com/blog/423549

时间: 2024-10-06 04:27:41

IE下javascript cookie path设置Bug的相关文章

linux下环境变量PATH设置错误的补救

转自:http://blog.csdn.net/u012102306/article/details/51036561 首先,PATH变量记录着各系统命令的存放路径,所以平时使用系统命令时可以直接输入命令而不需要连命令的路径一起. 比如"vi"命令,在PATH变量正常的时候直接输入"vi /etc/profile"就可以,而PATH变量出错的时候就需要输入"/bin/vi /etc/profile"才能正常使用,否则系统将提示错误. 也就是说,即

同一网站不同子目录的cookie要设置path

同一网站不同子目录的cookie要设置path,才能互相访问.参见: cookie path http://www.cnblogs.com/ainiaa/archive/2011/11/18/2253841.html 以前使用cookie的时候 没有在意path的问题.这次公司商城实现了静态化的功能,多了2级目录.导致了我在商品详情页面设置好的cookie(path为/good/商品ID/)在店铺首页竟然访问不到(店铺首页的path为'/store/').cookie的名称都是一致的.唯一不同的

td设置虚线dotted框,在chrome下有时会出现实线bug

chrome浏览器中,为td设置border:1px dotted #eee;时,有些地方会出现实线. 这是因为Chrome在border合并时,有点碰运气的感觉,两条虚线正好交错在一起时会合成一条实线.Demo中table的宽度是886px,增加1px或者减少1px都可以解决这个问题.有兴趣的童鞋还可以试着不断增加宽度,观察border交错时的变化,你会发现它6个像素为一个周期. 可参考 Chrome下的Border合并BUGhttp://ued.ctrip.com/blog/?p=2484

[转自脚本之家] Javascript cookie 详解

cookie概述 在上一节,曾经利用一个不变的框架来存储购物栏数据,而商品显示页面是不断变化的,尽管这样能达到一个模拟 全局变量的功能,但并不严谨.例如在导航框架页面内右击,单击快捷菜单中的[刷新]命令,则所有的JavaScript变量都会丢失.因此,要实现严格的 跨页面全局变量,这种方式是不行的, JavaScript中的另一个机制:cookie,则可以达到真正全局变量的要求. cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由J

关于Cookie安全性设置的那些事

一.标题:关于Cookie安全性设置的那些事 副标:httponly属性和secure属性解析 二.引言 经常有看到XSS跨站脚本攻击窃取cookie案例,修复方案是有httponly.今天写出来倒腾下... 2.1首先必须的预备cookie知识.假如你第一次认识cookie,请先阅读这篇文章: js于cookies.zip.google cookie. 三.Cookie属性 cookie内容,如图所示:   HTTP response header: Set-Cookie: <name>=&

Python学习---django下的cookie操作 180201

什么是Cookies 什么是Cookies cookies设置的原因: 1. http请求的无记忆性: 2.加快访问速度  3. 减少服务器压力 cookies特点: cookies保存在客户端浏览器上的键值对,且每次访问页面都会带着cookies cookies可以主动清除 cookies也可以被"伪造",可以被别人带着cookies操作你的账号 cookies会根据域名进行分类,不能跨域共享,也就是说百度有百度的,JD有京东的 cookies必须请求数据成功后才能有用哈 浏览器可以

cookie的设置、获取以及删除

首先介绍一下cookie的基本信息: cookie是以域为单位的,它必须放在服务器的的环境下,但是cookie的容量小,只有4kb,并且也不安全,还有入股cookie的名字相同,会修改或者覆盖原来的值,如果名字不同,会添加一条cookie: 接下来再和大家说一声关于获取cookie: 获取到cookie的格式都是字符串: 父级种下的cookie,子级可以获取到:子级种下的cookie,父级获取不到: 还有就是cookie的path:可以设置,一般都是设置到 '/' 根目录下: 好了,下面就是我封

JavaScript cookie()的使用

JavaScript cookie /*设置cookie*/ function setCookie(c_name,c_value,expires){     var date = new Date();     date.setTime(date.getTime()+(expires*60*1000));     document.cookie = c_name + "=" + c_value + ";     expires=" + date.toGMTStrin

[JavaScript]cookie实现刷新不变化树形菜单

通过设置cookie来保存树形菜单的状态,在页面加载时重新读取cookie来设置菜单. 菜单的HTML结构: 1 <div class="treemenu"> 2 <ul> 3 <li> 4 <a href="#" id="treemenu_a_1">一级菜单一</a> 5 <div class="submenu" id="submenu_1"