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

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

  1. varcookie_name="name";
  2. varcookie_value="value";
  3. expires=newDate();
  4. expires.setTime(expires.getTime()+86400*1000);
  5. //有Bugdocument.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. //IECookieBug替代方案
  2. varcookie_path=window.location.pathname;
  3. varcookie_name=encodeURIComponent(cookie_path.substring(cookie_path
  4. .lastIndexOf('/')+1));
  5. cookie_path=cookie_path.substring(0,cookie_path.lastIndexOf('/')+1);
  6. varcookie_value="value";
  7. expires=newDate();
  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



更多相关文章

  1. JS在页面加载时候onload与匿名自调用函数的区别
  2. “错误:路径必须是字符串”(v5.10.0)
  3. 如何在HTML页面中维护SWF文件的大小?
  4. 鼠标按下时是否可以防止鼠标光标离开页面
  5. 【JavaScript】案例一:使用JS完成注册页面表单校验
  6. electron 将pc端(vue)页面打包为桌面端应用
  7. 从打印页面中删除网址并打印文本
  8. 如何在我的页面上以漂亮的格式显示JSON对象?(复制)
  9. 如何从单一路径获取上层路径?

随机推荐

  1. Android(三)Android SDK无法更新解决方式
  2. Android Animation动画(Frame-By-Frame An
  3. android > android 客户端 ,PHP 服务器端
  4. 2011.12.05(4)——— android JNI学习之三
  5. 解析错误:解析软件包时出现问题
  6. Android 动画框架代码分析
  7. This android SDk requires Android deve
  8. 浅谈Android下拉菜单Spinner
  9. Error:(15) No resource identifier foun
  10. android执行外部程序,类似DELPHI里的EXEC