项目中设置完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

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

  1. JavaScript Cookie常用设置

    cookie是一种早期的客户端存储机制,起初是针对服务器端脚本设计使用的,只适合存储少量文本数据.从最底层来看,作为HTTP协议的一种扩展实现它.cookie数据会自动在Web浏览器和Web服务器之间 ...

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

    本文转自: http://blog.clzg.cn/blog-614449-740527.html    之前不小心在/etc/profile中添加了错误的PATH变量,导致几乎所有的系统命令无法使用 ...

  3. PHP与JavaScript下的Cookie操作

    下面的例子列出几种情形交互场景,列出JS和php交互的方法.总结下,以免日后再为cookie问题困扰. setcookie.php getcookie.php 总结: php用自身函数读取php 的c ...

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

    一.标题:关于Cookie安全性设置的那些事 副标:httponly属性和secure属性解析 二.引言 经常有看到XSS跨站脚本攻击窃取cookie案例,修复方案是有httponly.今天写出来倒腾 ...

  5. Cookie 简单设置使用

    cookie的理解可以为,存放在用户浏览器上的一个文件,里面是键值对数据,用于跟服务端通讯.前端可以通过jquery cookie插件设置和读取,后端直接设置 1.获取Cookie: 1 2 3 4 ...

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

    什么是Cookies 什么是Cookies cookies设置的原因: 1. http请求的无记忆性: 2.加快访问速度  3. 减少服务器压力 cookies特点: cookies保存在客户端浏览器 ...

  7. cookie的设置、获取以及删除

    首先介绍一下cookie的基本信息: cookie是以域为单位的,它必须放在服务器的的环境下,但是cookie的容量小,只有4kb,并且也不安全,还有入股cookie的名字相同,会修改或者覆盖原来的值 ...

  8. JS 浏览器cookie的设置,读取,删除

    JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的. 而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一 ...

  9. [JavaScript] Cookie,localStorage,sessionStorage概述

    Cookie Cookie 是一些数据, 存储于你电脑上的文本文件中,当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息.Cookie 的作用就是存储 web 页面 ...

随机推荐

  1. Cesium几个案例介绍

    前言 本文为大家介绍几个Cesium的Demo,通过这几个Demo能够对如何使用Cesium有进一步的了解,并能充分理解Cesium的强大之处和新功能.其他的无需多言,如果还不太了解什么是Cesium ...

  2. Winform开发中如何将数据库字段绑定到ComboBox控件

    最近开始自己动手写一个财务分析软件,由于自己也是刚学.Net不久,所以自己写的的时候遇到了很多问题,希望通过博客把一些印象深刻的问题记录下来. Winform开发中如何将数据库字段绑定到ComboBo ...

  3. [Servlet&JSP] 初识ServletContext

    ServletContext是整个Web应用程序运行后的代表对象,能够通过ServletConfig的getServletContext()方法来取得,之后就能够利用ServletContext来取得 ...

  4. POJ - 1611The Suspects-并查集

    POJ - 1611 The Suspects Time Limit: 1000MS   Memory Limit: 20000KB   64bit IO Format: %I64d & %I ...

  5. ado 字符串变量

    这次变量主要针对 Mfc 的 Cstring 类型的变量(前面VC 链接Access 数据库 插入变量到表) 思路; 1 把cstring 类型 转为 string 2 string 转 char 数 ...

  6. jquery通过数值改变球大小

    在业务中遇到一个问题:在页面上显示一个球.且球的大小会应数字的大小而改变. 我们都知道 js是能够画圆(用css样式准备一个圆.假设addClass),但这并非我们想要的. 于是笔者脑洞打开:用样式画 ...

  7. Python笔记·第七章—— IO(文件)处理

    一.文件处理简介 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知 ...

  8. sqlser 2005 使用执行计划来优化你的sql

    一:sqlserver 执行计划介绍    sqlserver 执行计是在sqlser manager studio 工具中打开,是检查一条sql执行效率的工具.建议配合SET STATISTICS ...

  9. springboot 项目maven 打包错误

    Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.6.RELEASE:repackage ...

  10. 此地址使用了一个通常用于网络浏览以外目的的端口。出于安全原因,Firefox 取消了该请求。

    火狐无法访问本机IIS部署的网站,弹出:此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求 的解决办法 关于火狐浏览器访问本机IIS部署的网站弹出"此 ...