博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IE下javascript cookie path设置Bug
阅读量:6243 次
发布时间:2019-06-22

本文共 1693 字,大约阅读时间需要 5 分钟。

项目中设置完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.   
  6. // 有Bug document.cookie无法读取到cookie_name值  
  7. document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)  
  8.         + "; expires=" + expires.toGMTString() + "; path="  
  9.         + window.location.pathname;  
  10. // 正常  
  11. document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)  
  12.         + "; expires=" + expires.toGMTString() + "; path=/test/";  
  13. // 正常  
  14. document.cookie = "cookie_name=" + encodeURIComponent(cookie_value)  
  15.         + "; 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.   
  10. document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)  
  11.         + "; expires=" + expires.toGMTString() + "; path=" + cookie_path;  

 

替代方案根据每个页面的URL文件名来做Cookie名,有效范围在当前页路经下。

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

  

参考自:

转载于:https://www.cnblogs.com/water-wjf/p/4277459.html

你可能感兴趣的文章
git reset revert 回退回滚取消提交返回上一版本
查看>>
适配mpvue平台的的微信小程序日历组件mpvue-calendar
查看>>
Consul Config 使用Git做版本控制的实现
查看>>
我们必须要知道的RESTful服务最佳实践
查看>>
百度调整Q2营收预期
查看>>
阿里巴巴智慧建筑(IB)峰会 与筑梦者共建新生态
查看>>
Apache Zeppelin安装及使用
查看>>
Redis实现微博后台业务逻辑系列(四)
查看>>
Power5连接使用DS8000遇到问题处理一例
查看>>
迈克菲实验室:Flame病毒的深度分析
查看>>
用十条命令在一分钟内检查Linux服务器性能[转]
查看>>
深入理解bash及字符串的处理
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
DNS多点部署IP Anycast+BGP实战分析
查看>>
iostat详细使用
查看>>
用户与组
查看>>
【12c新特性】12c中新加入的Enqueue Lock
查看>>
JavaScript语法详解(四)
查看>>
Fail to queue the whole FAL gap in dataguard一例
查看>>
03在Windows Server 2008R2上面建立子域
查看>>