如果你对什么是 cookie 还不了解,则此篇文章不适合你看,如果你希望了解一下,则请先了解什么是 cookie 会对你了解此篇文章有作用:
Cookie
Cookie
(现在绝大部分站点都会用到 cookie记录一小部分信息。)
cookie 有如下属性:
名称: 指给 cookie 设置的名称,不同的浏览器,cookie 存储的方式不同;
内容:cookie 的值;
主机: 此 cookie 所属的站点;
路径: 指明此 cookie 只在指定站点下的指定路径范围内的页面可以获取,对于全站 cookie,路径为 “/”;
过期时间:指此 cookie从创建开始到消亡的时间段。有二种情况:
1、指定过期时间,cookie会存储到硬盘上,为了下次能读取。cookie 到了指定的过期时间,自动消亡;
2、不指定时间,则会话结束时自动消亡,此种情况的 cookie,不会保存到硬盘上。
好,简单的介绍了 cookie 之后,接下来开始我们的正文。在此不对比各浏览器之间的性能、HTML兼容性、个性化使用、等,只在于说说 cookie 在各浏览器下的多窗口共用使用情况,
引发写此篇文章的原因:
下面给出对比情况:
对比的浏览器 | 指定 cookie 的过期时间 | 未指定 cookie 过期时间 |
Mozilla Firefox 3.0 | 多窗口共用 cookie(公用) | 公用 |
IE 7.0 | 公有 | 私有 |
Opera 9.60 | 公有 | 公用 |
Apple Safari 3.1 | 公有 | 公用 |
Google Chrome 0.2.149.30 | 公有 | 公用 |
说明:腾讯的TT,傲游(Maxthon)等其实质是用的IE内核,因此IE是什么情况,他们就是什么情况。
根据上面表格说明,只有 IE浏览器,在没有指定 cookie的过期时间情况下,此种 cookie是专属于当前窗口(会话)的。
为什么除IE之外的浏览器都这样设计,我个人搞不明白,有人清楚的冒个泡,哈哈。
测试的WEB服务器:IIS,asp.net;
clid
对于 asp.net2.0,有一个有趣的情况。由于微软用了 名称为 ASP.NET_SessionId 的 cookie 来记录第一次打开的会话ID,如果在web.config中配置的 Session 生存期内,浏览器没有与后台交互,则后台 Session 会自动结束。当后台 Session 结束后,浏览器再次请求时,后台ASP.NET会创建一个新的会话Session,并且把此新 Session的ID设置为 ASP.NET_SessionId记录的值,而不是新命名Session的ID。这样会给人一些假象,以为还是原来的 Session,其实原来的 Session已经结束,并且原来保存在 Session的所有内容已不存在。
而 ASP.NET_SessionId 保存会话的唯一标识符。这个会话 Cookie 为浏览器窗口关闭时自动消亡( cookie 的第二种情况)。记录当前框架的版本;另外,在asp.net2.0中,每个会话开启后,微软会设置二个 cookie:clid 和 ASP.NET_SessionId。而实际应用下,抛开技术层面,从用户使用和体验角度来说,是允许一台电脑可以打开多个窗口用不同帐户登录的,就象大家都在使用的QQ,如果现在腾讯限制一台电脑在同一时间只允许有一个QQ帐号登录,我想,有很多用户是不能接受的(MSN就限制了一台电脑同一时间只能有一个帐号登录,这也是有很多人不愿意使用MSN的其中一个原因,题外话了)。那么,根据这种结果,表明除IE之外的浏览器,如果一个站点是用 cookie 记录帐户登录信息,则一台电脑同时只能用一个帐户登录相同站点了。其实质是:除IE之外的浏览器,不管开几个单独的窗口,都是共用一个会话(Session),IE则是一个单独的窗口开一个会话。根据 上面描述的 cookie 的过期时间特性,我们可以理解第一种情况的 cookie 可以在浏览器的多窗口间共用,而第二种情况的 cookie,是会话结束就自动消亡,我们会认为,单独打开的多个窗口(在一个页面中弹出或打开的新窗口应该属于主窗口)是没有联系的,也就是说,一个窗口一个会话,但事实并不是如此。当我想打开多个浏览器窗口,分别用同一站点的多个不同帐号登录站点时,按照我的预想,应该是不同窗口登录后,操作都是针对各自帐号的。但却引起帐号信息混乱,录入数据出错。因此查找原因,并用不同浏览器测试。最后发现是因为站点用了 cookie 记录登录帐号信息,问题出在 cookie 在多个窗口间的共用性。注意:这里的多窗口,指的是运行多个浏览器程序,不是指有些浏览器里开的多个标签页。是与 Web 站点而不是与具体页面关联的,所以无论用户请求浏览站点中的哪个页面,浏览器和服务器都将交换 http://www.soa365.com/ 的 Cookie 信息。用户访问其他站点时,每个站点都可能会向用户浏览器发送一个 Cookie,而浏览器会将所有这些 Cookie 分别保存。以后,如果该用户再次访问站点上的页面,当该用户输入 URL http://www.soa365.com/ 时,浏览器就会在本地硬盘上查找与该 URL 相关联的 Cookie。如果该 Cookie 存在,浏览器就将它与页面请求一起发送到站点,WEB应用程序就能确定该用户上一次访问站点的记录信息。您可以根据这些信息向用户发送一条消息,也可以检查过期时间或执行其他有用的功能。假设在用户请求访问网站 http://www.soa365.com/ 上的某个页面时,您的应用程序发送给该用户的不仅仅是一个页面,还有一个包含日期和时间的 Cookie。用户的浏览器在获得页面的同时还得到了这个 Cookie,并且将它保存在用户硬盘上的某个文件夹中。是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。用户每次访问站点时,Web 应用程序都可以读取 Cookie 包含的信息。