转自:http://www.mzone.cc/article/363.html
昨天在部署系统时发现一个看来很奇怪的问题,就是在google浏览器Chrome和Firefox下都运行的非常正常,但在IE内核的浏览器中总是有一个cookie无法取到的问题。无意间google下发现网上有很多针对IE8的cookie丢失的问题讨论,就想是不是IE8的cookie处理机制导致的,其实后来发现不是,算是走了弯路。因为本地运行正常并且是IE中都跑的蛮ok的,一到服务器上就出现了问题,具体的情形是我在网页中有一段类似如下的脚本引用:
<script language="javascript" src="http://abc.mydomain.com/p1/check"></script>
这段脚本就是向服务器abc.mydomain.com请求一段js,按理来说请求这段js时浏览器应该同时附带该域下的cookie到服务器上,服务器程序会解析到cookie并返回对应的信息,我出现的问题就是IE中根本就不发送cookie到服务器。而之前设置cookie的java代码类似如下:
Cookie cookie = new Cookie("name", "value");
cookie.setMaxAge(-1);
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
这段脚本看起来没有什么错误,确实是在本地测试时一切正常。其实这个最大的问题就是setPath这条语句了,因为我这里是动态获取应用程序的上下文路径作为cookie的根路径,在本地测试时由于都有contentpath,所以不会有什么问题。但一旦部署到服务器后由于是独立域名部署根contextpath,所以取到的contextpath是空串,可惜的是IE对如下的cookie路径设置和chrome和firefox是完全不一样的:
实践证明IE会忽略这个path,而chrome和firefox则会认为是设置了。因为根据cookie规范,如果设置了path,那么只有当访问路径中包含了这个path的url时才会发送cookie到服务器;如果没有设置path,那么只有当访问和设置cookie同样的路径时才会发送cookie到服务器。可惜的是这里IE忽略了,因此会按照后面的来处理cookie,而chrome和firefox则会认为设置了path,那么理所当然的任何访问路径都会携带cookie,这也就导致了我前面所说的情况了。
PS:cookie规范文档请查看这里:http://curl.haxx.se/rfc/cookie_spec.html
分享到:
相关推荐
1.domain表示的是cookie所在的域,默认为请求的地址,如网址为www.jb51.net/test/test.aspx,那么domain默认为...2.path表示cookie所在的目录,asp.net默认为/,就是根目录。在同一个服务器上有目录如下:/te
Path – 路径。指定与cookie关联的WEB页。 值可以是一个目录,或者是一个路径。 如果//www.jb51.net/test/index.html 建立了一个cookie,那么在//www.jb51.net/test/目录里的所有页面,以及该目录下面任何子目录里的...
(2)、不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果。 (3)、限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。3、...
(2)、不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果。 (3)、限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。 3、...
代码如下: function ClearCookie() { var expires = new Date(); expires.setTime(expires.getTime() – 1000); //当前时间减去一秒,相当于立即过期(可以增减) [removed] = “appCode=’222”’;path=/;expires=” +...
(2)、不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果。 (3)、限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。 3...
用header 发送cookie header(“Set-Cookie: testcookie=中文; path=/; domain=.phpv.net; expires=”.gmstrftime(“%A, %d-%b-%Y %H:%M:%S GMT”,time()+9600)); 请将path=/; domain=.phpv.net;改为自己...
domain=baidu.comexpires是cookie的生存周期,path是cookie的有效路径,domain是cookie的有效域. 路径”path”用于设置可以读取一个cookie的最顶层的目录. 将cookie的路径设置为你的网页最顶层的目录可以让该该目录...
function setCookie(cookieName,cookieValue,cookieExpires,cookiePath) { cookieValue = escape(cookieValue);//编码latin-1 if(cookieExpires=="") { var nowDate = new Date(); nowDate.setMonth(nowDate....
expires是cookie的生存周期,path是cookie的有效路径,domain是cookie的有效域. 路径”path”用于设置可以读取一个cookie的最顶层的目录.将cookie的路径设置为你的网页最顶层的目录可以让该该目录下的所
path 可选,服务器端有效路径,/ 表示整个域名有效,默认为当前设置 cookie 时页面的路径 domain 可选,该 cookie 有效的域名 secure 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。 代码的封装 (function...
cookielib是一个自动处理cookies的模块,如果我们在使用爬虫等技术的时候需要保存cookie,那么cookielib会让你事半功倍!他最常见的搭档模块就是python下的urllib和request。 核心类 1.Cookie 该类实现了Netscape ...
本文实例讲述了jQuery cookie的公共方法封装和使用。分享给大家供大家参考,具体如下: common.js放入公共方法: /** * 刷新cookie ... $.cookie(_key, _value, {path: cookiesPath, expires: cook
cookie.setPath(/); response.addCookie(cookie); 以上这篇关于jsp中cookie丢失问题(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:jsp使用...
本文实例讲述了javascript实现设置、获取和删除Cookie的方法。分享给大家供大家参考。具体实现方法如下: /* *设置Cookie * * name:cookie所对应的键 * value:cookie所对应的值 ... //cookie键值对 var str = nam
path:”/”,//cookie的路 径 domanin: //cookie的域名 secure:true //true,cookie的传输会要求一个安全协议,否则反之 }); 读取cookie 代码如下:$.cookie(“this-cookie”) 删除cookie 代码如下:$.co
最后使用$.cookie(“name”,null,{path:”/”}); 终于成功了. 或许是$.cookie的一个bug吧, 不知最新版的有没有修复这个Bug. 以下是其他的一些$.cookie顺便转载过来以备用: 代码如下:$(function(){var COOKIE_NAME...
本文实例讲述了jQuery使用cookie与json简单实现购物车的方法。分享给大家供大家参考,具体如下:...$.cookie("cart","ids",{expires:-7,path:"/"}) //存储cookie 保存7天 if($.cookie("cart")==undefined){//不存在用un
setcookie() 定义一个和其余的 HTTP 标头一起发送的 cookie。和其它标头一样,cookie 必须在脚本的任何其它输出之前发送(这...函数定义:bool setcookie ( string name [, string value [, int expire [, string path
//cookie时间 cooki.setPath(“/”); //根据个人的不用,在不同功能的路径下创建 response.addCookie(cooki); //清空Cookie操作 Cookie[] cookies=request.getCookies(); try { for(int i=0;i<cookies.length;i++...