存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口 。而对于保存在内存里的cookie , 不同的浏览器有不同的处理方式 。对于IE , 在一个打开的窗口上按Ctrl-N(或者从文件菜单)打开的窗口可以与原窗口共享,而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存cookie;对于Mozilla Firefox0.8,所有的进程和标签页都可以共享同样的cookie 。一般来说是用javascript的window.open打开的窗口会与原窗口共享内存cookie 。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用session机制的web应用程序开发者造成很大的困扰 。
下面就是一个goolge设置cookie的响应头的例子
HTTP/1.1 302 Found
Location:
Set-Cookie: PREF=ID=0565f77e132de138:NW=1:TM=1098082649:LM=1098082649:S=KaeaCFPo49RiA_d8; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Content-Type: text/html
这是使用HTTPLook这个HTTP Sniffer软件来俘获的HTTP通讯纪录的一部分
浏览器在再次访问goolge的资源时自动向外发送cookie
使用Firefox可以很容易的观察现有的cookie的值
使用HTTPLook配合Firefox可以很容易的理解cookie的工作原理 。
IE也可以设置在接受cookie前询问
这是一个询问接受cookie的对话框 。
四、理解session机制
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息 。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存 。
保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器 。一般这个cookie的名字都是类似于SEEESIONID , 而 。比如weblogic对于web应用程序生成的cookie,JSESSIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,它的名字就是JSESSIONID 。
由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器 。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息 , 表现形式为;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
另一种是作为查询字符串附加在URL后面,表现形式为
这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同 , 采用第一种方式也有利于把session id的信息和正常程序参数区分开来 。
为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id 。
另一种技术叫做表单隐藏字段 。就是服务器会自动修改表单 , 添加一个隐藏字段 , 以便在表单提交时能够把session id传递回服务器 。比如下面的表单
form name="testform" action="/xxx"
input type="text"
/form
在被传递给客户端之前将被改写成
form name="testform" action="/xxx"
input type="hidden" name="jsessionid" value="https://www.04ip.com/post/ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"
推荐阅读
- html5具有那些优势,html5有哪些新特性和优点
- 电脑显卡怎么检查新旧,电脑显卡怎么看新旧
- c语言时间比较的函数 c语言时间比较的函数怎么写
- 表单提价必填的提示jquery,表单提交是什么意思
- 歪歪怎么直播视频号,歪歪如何直播游戏
- php分页获取不同数据库 php通用分页类
- linux筛选文件夹命令,筛选Linux进程的命令
- ppt怎么制作坐标,ppt怎么制作坐标图表
- 母婴科普直播视频素材,母婴直播主题吸引人话题