Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2894327
  • 博文数量: 412
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 7374
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-25 15:15
个人简介

学习是一种信仰。

文章分类

全部博文(412)

文章存档

2014年(108)

2013年(250)

2010年(11)

2009年(43)

我的朋友

分类: Web开发

2014-09-30 17:01:41

网站必须要和主流浏览器友好,才称得上一个好的网站。
firefox调试是很方便的,但ie不方便。
最近调试ie的cookie,用到一些知识点:
Cookies
这个由Netscape的前雇员Lou Montulli在1993年3月的发明的东西,至今仍然被广泛的应用在各网站上,我们用它来保存登录状态,用它来保存浏览过的商品,用它来保存购物车物品,等等。 
目前cookie存在了以下几种的规范: 
Netscape cookie草案:是最早的cookie规范,也是RFC2109的基础。尽管如此,它与RFC2109还是有较大的差别,所以跟一些服务器有兼容上的问题。 
RFC2109:基于是w3c发布的第一个官方cookie规范。理论上,所有的服务器在处理版本1的cookie时,都要遵循此规范。遗憾的是,由于这个规范过于严格,很多服务器并没有正确的实现这个标准或者还是在使用Netscape的cookie草案。 
RFC2965:cookie规范的第二个版本,指出了RFC2109里cookie版本1的不足。RFC2965的目标是最终取代RFC2109。
下面我们来看看浏览器,web服务器跟cookie之间的交互是怎样的: 
当我们用浏览器访问一个网站的时候,就会想服务器发起一个请求。 
根据请求的url和cookie本身的属性,筛选出需要发送给服务器的cookie(当然也有可能没有cookie)。 
如果有多个cookie的话,还会决定发送的顺序。 
把这些需要发送的cookie包含在HTTP的包头里发送给服务器。 
然后到了应答阶段,服务器会发回一个应答包头,包头里包含了cookie信息。 
浏览器解析这个cookie,包括名称,值,路径等元素。 
最后,把cookie保存在本地。
至于哪些cookie会被发送到服务器端,是有一套规则的,例如域名选择、路径选择和Max-Age选择,这些都可以在RFC2109里找到,这里就不展开了。 
从上面可以看到,每次的http请求,cookie都会包含在包头里发送给服务器,这也是被开发者广为诟病的一个cookie缺点,因为这意味这每个请求都无形中增加了流量,特别是像请求图片这些资源的时候,附带的cookie信息是完全没有必要的。所以现在很多网站图片等静态资源都会用独立的域名运作,这样就可以单独对这些域名进行cookie设置。除此以外,cookie还有以下影响比较大的缺点: 
安全性问题。cookie在http请求中是明文传递的,除非使用SSL通道,不然是不宜在cookie里放置重要信息。 
大小问题。每个cookie的大小不能超过4K。每个Domain下cookie个数根据浏览器不同也不同。
关于Cookies的一些限制问题,可以参考下Nicholas的一篇文章:浏览器允许的每个域名下的Cookie数: 
IE7跟IE8限制为50个。 
Firefox限制为50个。 
Opera限制30个 
Safari/WebKit没有限制,但是如果header的大小超过服务器能处理的情况下,则会出现错误。
那如果Cookie数设置超过限制的时候,各浏览器又是如何处理呢: 
Safari由于没有Cookie数的限制,所以不作讨论。 
在IE和Opera下,将会采用LRU(The Least Recently Used)方法,自动踢掉最老的cookie以腾出空间给新的cookie。IE和Opera使用这个方法。 
Firefox就比较独特:它貌似会随机决定哪些cookie将会保留,尽管最后设置的cookie会被保留。所以在Firefox里不要超过cookie数的限制。
cookie的总大小在各浏览器中也是不同的: 
Firefox和Safari允许cookie多达4097个字节,其中4096个字节是名字和值,1个字节是=号。 
Opera允许cookie多达4096个字节,这些字节包含名字、值和=号。 
IE允许4095个字节,这些字节包含名字、值和=号。
注意这里用的字节,也就是,如果是多字节字符,自然就会占用两个字节。在所有浏览器里,如果设置的cookie大小超过限制,那么它就会被忽略或者不被设置。 
从上面,我们可以看到,Cookie确实存在一些不足,但是它的一些缺点也正是它的优点,例如每个请求都会被放到包头里发送给服务器,正是这个特性我们才能很方便的传输sessionid。Cookie的出现可谓大大推动了网页的发展,而且在未来很长的一段时间里,Cookie还会继续发挥它的作用。但是也正是由于Cookie存在种种的不足,才会有新的本地存储技术出现的需求。
设置IECOOKIES的收藏目录: 
1。打开注册表编辑器。打开注册表的方法为:运行注册表编辑器(开始->运行->regedit) 
2。打开HKEY_CRURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVESION\EXPLORER \USER SHELL FOLDERS 子键,双击右侧窗口中的COOKIES,将数值设置为收藏夹的完整路径,如:D:\COOKIES 
阅读(1312) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~