转自: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是完全不一样的:
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
相关推荐
在本文中,我们将深入探讨IE8浏览器中处理Cookie的一些关键问题和解决方案,以及关于Opacity滤镜的使用。在开发Web应用程序时,尤其是在处理用户交互和界面效果时,这两个方面是至关重要的。 首先,我们来讨论IE8...
IE浏览器特有的Cookie处理机制确实可能引起基于Session的Web应用程序出现问题,尤其是在使用frameset结构时。通过适当调整响应头策略或改用URL重写传递Session ID的方法,可以有效规避这些问题,确保用户会话的一致...
1.domain表示的是cookie所在的域,默认为请求的地址,如网址为www.jb51.net/test/test.aspx,那么domain默认为...2.path表示cookie所在的目录,asp.net默认为/,就是根目录。在同一个服务器上有目录如下:/te
Dim cookiePath As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\Microsoft\Windows\Cookies" Dim files() As String = Directory.GetFiles(cookiePath, "*.txt") For Each...
Path – 路径。指定与cookie关联的WEB页。 值可以是一个目录,或者是一个路径。 如果//www.jb51.net/test/index.html 建立了一个cookie,那么在//www.jb51.net/test/目录里的所有页面,以及该目录下面任何子目录里的...
(2)、不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果。 (3)、限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。3、...
在这个例子中,`name`和`value`分别是Cookie的名称和值,`expires`是过期时间,`domain=.wrox.com`表明这个Cookie对`.wrox.com`及其子域有效,`path=/`表示所有路径下都有效,`secure`标志表示仅在HTTPS连接中发送...
function setCookie(cookieName, cookieValue, cookieExpires, cookiePath) { cookieValue = escape(cookieValue); // 编码latin-1字符 if (cookieExpires == "") { var nowDate = new Date(); nowDate.setMonth...
【P3P(Platform for Privacy Preferences)】是W3C提出的隐私保护标准,要求网站公开其对用户隐私的处理方式。如果网站的隐私政策符合用户设置的标准,浏览器会自动接受Cookie。然而,这可能导致用户在不知情的情况...
(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=” +...
此外,文档中还提到了cookie在不同浏览器中的兼容性问题,比如FF(Firefox)和IE(Internet Explorer)对cookie的支持差异,以及如何在JavaScript中通过各种参数设置cookie的属性,如过期时间、路径、域和安全标志。...
- **Internet Explorer (IE)**:将Cookie信息保存在一个特定的目录下,例如`C:\Windows\cookies`。 #### 二、Cookies的好处 Cookies的应用非常广泛,它们给网站和用户带来了许多便利,主要包括以下几点: 1. **...
因此,限制Cookie只对特定IP地址可见是一种常见的安全措施。 要使用JavaScript实现Cookie的IP限制,我们需要在设置Cookie时记录该Cookie关联的IP地址。以下是一个简单的示例: ```javascript function setCookie...
IE和Firefox对cookies的处理方式略有不同。在IE中,cookies存储在用户的个人文件夹下的一个名为"Cookies"的文件夹中,而Firefox则将它们存放在"Profiles"文件夹内的特定用户配置文件中。读取这些cookies通常需要编程...
(2)、不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果。 (3)、限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。 3...
一个用来在浏览器(IE9+)中操作cookieJavaScript Api; 还未经严密测试,发现bug请及时联系 安装 用script标签引入 下载并引入: [removed][removed] NPM $ npm i js-icookie -S 基本用法 全局配置 按照代码执行...
此函数能够有效地帮助我们处理各种复杂的 Cookie 操作。在实际使用中,你可以将此函数添加到你的项目中,以便于复用。 此外,我们还需要注意 Cookie 的 `path` 设置,如果未设置 `path: '/'`,那么浏览器会根据当前...
用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;改为自己...
不同的浏览器可能对删除Cookie的行为有不同的处理,例如Firefox(FF)和Internet Explorer(IE)。 - FF:删除时,必须指定与设置Cookie时相同的路径,且无论键名大小写,都会沿着父路径查找并删除。 - IE:若键名...