2013年6月17日星期一

浅谈浏览器cookie

由于HTTP协议是无状态的,无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
此时会引用session,比如说登陆成功后,服务端会为用户开辟一块内存区域,用以存放用户这本次会话的一些内容,比如说用户名之类信息。那么就需要一个东西来标识这个内存区域是你的而不是别人的,这就是jsessionid。
然后,服务器响应时会将这个jsessionid发回给你的浏览器,放入你的浏览器的cookie中(这个cookies是内存cookies,跟一般的不一样,它会随着浏览器的关闭而消失)。
之后,只有你浏览器没有关闭,你每向服务器发请求,服务器就会从你发送过来的cookies中拿出这个session id,然后根据这个session id从内存中取出你之前存放的数据。
但是,如果你退出登陆了,服务器会清掉属于你的内存区域,所以你再登的话,会产生一个新的session了。

各浏览器对cookie也有不同的限制:

IE6.0
IE7.0/8.0
Opera
FF
Safari
Chrome
cookie个数:
每个域为20个
每个域为50个
每个域为30个
每个域为50个
没有个数限制
每个域为53个
cookie总大小:
4095个字节
4095个字节
4096个字节
4097个字节
4097个字节
4097个字节
当cookie超过限额时,浏览器一般会使用"LRU",最近最少使用原则,删除老的cookie。这样操作对程序本身是有很大影响的,比如获取不到需要的cookie字段,可能会引发一些意想不到的结果,比如用户访问登陆后,访问某个页面,会提示用户没有登陆,需重新登陆 等等。

因此,在使用cookie时,需要按严格的标准,和父域名、子域名之间要统一,尽量保证cookie的个数不超过20个,cookie的总大小不超时4KB。
目前查看cookie的工具有很多:
如 HttpWatch,fiddle,firebugs,tamper 以及chrome自带的插件 等
当然极力推荐 的还是FireCookie,是Firefox的一个插件,可以为Firebug添加Cookie的查看和管理功能
1. 如果某个网站的cookie较多,可以直接利用Firebug的搜索功能对cookie列表进行筛选,这个功能是从左到右完全匹配的,不匹配的结果将被隐藏 起来,只显示那些符合条件的结果。
2. 在Cookie列表视图状态下,有一些工具栏按钮可以执行一些特殊的操作,比如新建Cookie,删除当前网站的所有Cookie,以及设置网页使用Cookie的权限 等。权限标签按钮显示的是当前网页的权限状态:默认、禁止、允许线程Cookie、允许所有Cookie,除了显示状态,点击这个标签还可以直接修改。而且支持实时更新。
3. 如果你想知道cookie的值是什么时候发生变化的,可以直接使用Firebug的Console功能,Firecookie会在cookie的新建、修改、删除和被禁用的时候,向Console里写日志,如果嫌这个功能多余,可以在选择菜单中禁用。列表中的cookie是可以直接修改的,直接右键点击cookie,选择edit项就可以。
4. Firecookie支持剪贴板功能,可以对cookie进行复制、粘贴和剪切操作。如果把一个cookie项复制,并粘贴到记事本中,得到的结果是一个cookie赋值语句,左边是cookie名称,右边是cookie的值列表,包含domain域和path路径等项目。

没有评论:

发表评论