IE对Cookie的path处理

本文探讨了IE浏览器中cookie处理机制与跨域访问问题,指出在部署时遇到的IE不发送cookie到服务器的问题,并分析了原因在于本地测试时获取的contextPath为空串,导致IE忽略了cookie路径设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.mzone.cc/article/363.html

 

      昨天在部署系统时发现一个看来很奇怪的问题,就是在google浏览器Chrome和Firefox下都运行的非常正常,但在IE内核的浏览器中总是有一个cookie无法取到的问题。无意间google下发现网上有很多针对IE8的cookie丢失的问题讨论,就想是不是IE8的cookie处理机制导致的,其实后来发现不是,算是走了弯路。因为本地运行正常并且是IE中都跑的蛮ok的,一到服务器上就出现了问题,具体的情形是我在网页中有一段类似如下的脚本引用:

  1. <script language = "javascript" src = "http://abc.mydomain.com/p1/check" ></script >

      这段脚本就是向服务器abc.mydomain.com请求一段js,按理来说请求这段js时浏览器应该同时附带该域下的cookie到服务器上,服务器程序会解析到cookie并返回对应的信息,我出现的问题就是IE中根本就不发送cookie到服务器。而之前设置cookie的java代码类似如下:

  1. Cookie cookie = new Cookie ( "name", "value" ) ;
  2. cookie. setMaxAge ( - 1 ) ;
  3. cookie. setPath (request. getContextPath ( ) ) ;
  4. response. addCookie (cookie ) ;

      这段脚本看起来没有什么错误,确实是在本地测试时一切正常。其实这个最大的问题就是setPath这条语句了,因为我这里是动态获取应用程序的上下文路径作为cookie的根路径,在本地测试时由于都有contentpath,所以不会有什么问题。但一旦部署到服务器后由于是独立域名部署根contextpath,所以取到的contextpath是空串,可惜的是IE对如下的cookie路径设置和chrome和firefox是完全不一样的:


  
  1. cookie. setPath ( "" ) ;

      实践证明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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值