IE下javascript cookie path设置Bug
项目中设置完cookie,在Firefox下顺利测试通过。IE测试出现问题,经定位发现是Javascript设置 Cookie 时的 path 有问题。IE下Cookie设置在 /或者URL所在路径时正常,如果Cookie值作用域在当前URL下,则IE下javascript 无法获取到设置的Cookie值。
看下面演示代码,注意下面的path 区别:
- 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=/";
得出结果: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://conkeyn.iteye.com/blog/423549
IE下javascript cookie path设置Bug的更多相关文章
- JavaScript Cookie常用设置
cookie是一种早期的客户端存储机制,起初是针对服务器端脚本设计使用的,只适合存储少量文本数据.从最底层来看,作为HTTP协议的一种扩展实现它.cookie数据会自动在Web浏览器和Web服务器之间 ...
- linux下环境变量PATH设置错误的补救
本文转自: http://blog.clzg.cn/blog-614449-740527.html 之前不小心在/etc/profile中添加了错误的PATH变量,导致几乎所有的系统命令无法使用 ...
- PHP与JavaScript下的Cookie操作
下面的例子列出几种情形交互场景,列出JS和php交互的方法.总结下,以免日后再为cookie问题困扰. setcookie.php getcookie.php 总结: php用自身函数读取php 的c ...
- 关于Cookie安全性设置的那些事
一.标题:关于Cookie安全性设置的那些事 副标:httponly属性和secure属性解析 二.引言 经常有看到XSS跨站脚本攻击窃取cookie案例,修复方案是有httponly.今天写出来倒腾 ...
- Cookie 简单设置使用
cookie的理解可以为,存放在用户浏览器上的一个文件,里面是键值对数据,用于跟服务端通讯.前端可以通过jquery cookie插件设置和读取,后端直接设置 1.获取Cookie: 1 2 3 4 ...
- Python学习---django下的cookie操作 180201
什么是Cookies 什么是Cookies cookies设置的原因: 1. http请求的无记忆性: 2.加快访问速度 3. 减少服务器压力 cookies特点: cookies保存在客户端浏览器 ...
- cookie的设置、获取以及删除
首先介绍一下cookie的基本信息: cookie是以域为单位的,它必须放在服务器的的环境下,但是cookie的容量小,只有4kb,并且也不安全,还有入股cookie的名字相同,会修改或者覆盖原来的值 ...
- JS 浏览器cookie的设置,读取,删除
JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的. 而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一 ...
- [JavaScript] Cookie,localStorage,sessionStorage概述
Cookie Cookie 是一些数据, 存储于你电脑上的文本文件中,当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息.Cookie 的作用就是存储 web 页面 ...
随机推荐
- Sqoop2安装记录
我是採用的源代码编译的包安装的, 主要是考虑到会对部分功能做裁剪或增强, 详细源代码编译方式能够參考另外一篇博文<编译Sqoop2错误解决>.然后从dist/target文件夹下拷贝sqo ...
- Intellij IDEA安装golang插件
原文作者:Jianan - qinxiandiqi@foxmail.com 原文地址:http://blog.csdn.net/qinxiandiqi/article/details/50319953 ...
- poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)
链接:poj 1860 题意:给定n中货币.以及它们之间的税率.A货币转化为B货币的公式为 B=(V-Cab)*Rab,当中V为A的货币量, 求货币S通过若干此转换,再转换为原本的货币时是否会添加 分 ...
- 【SqlServer系列】表达式(expression)
1 概述 本篇这文章主要概述SqlServer表达式. 2 具体内容 2.1 使用范围 SQL Server(2008开始) :Azure SQL数据库:Azure SQL数据仓库:并行数 ...
- Intellij IDEA 安装和配置jrebel进行项目的热部署
Jrebel 先介绍一下jrebel,jrebel是可以热部署项目的一个工具,更改代码自动部署并不需要重启项目(在spring中的controller中,增加.修改方法都是可以进行热部署而不需要重启的 ...
- Spark Streaming VS Flink Streaming
引自:https://www.slideshare.net/datamantra/introduction-to-flink-streaming
- HTML+DIV+CSS+JSweb前端基础
HTML+DIV+CSS+JSweb前端基础 1.<html>和</html> 标签限定了文档的开始和结束点. 属性: (1) dir: 文本的显示方向,默认是从左向右 (2 ...
- qt关键字高亮
qt的高亮显示主要是使用qsyntaxhighlighter类,由于qsyntaxhighlighter是抽象基类,所以需要继承并自己实现 //头文件 #ifndef MARKDOWN_HIGHLIG ...
- 深度优先搜索(DFS)——部分和问题
对于深度优先搜索,这里有篇写的不错的博客:DFS算法介绍 .总得来说是从某个状态开始,不断的转移状态知道无法转移,然后回到前一步的状态.如此不断的重复一直到找到最终的解.根据这个特点,常常会用到递归. ...
- spring boot使用profile来区分正式环境配置文件与测试环境配置文件
转载请在页首注明作者与出处 一:前言 经常在开发的时候,项目中的配置文件,在个人开发的时候有一套配置文件,在测试环境有一套配置文件,在正式环境有一套配置文件,这个时候如果配置文件复杂,需要改的东西就特 ...