2024年4月28日发(作者:)
Session
Session定义
一般被翻译为‘会话’,具体到Web中的Session指的就是用户在浏览某个网站时,从
进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此从
上述的定义中我们可以看到,Session实际上是一个特定的时间概念。
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。
比如:
JSESSIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,
它的名字就是JSESSIONID。
由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把
session id传递回服务器。经常被使用的一种技术叫做URL重写。
就是把session id直接附加在URL路径的后面,附加方式也有两种:
1.一种是作为URL路径的附加信息,表现形式为
...../xxx;jsessionid=ByOK ... 99zWpBng!-145788764
2.另一种是作为查询字符串附加在URL后面,表现形式为
...../xxx?jsessionid=ByOK ... 99zWpBng!-145788764
这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采
用第一种方式也有利于把session id的信息和正常程序参数区分开来。
为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个
session id。
另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便
在表单提交时能够把session id传递回服务器。这种技术现在已较少应用。
有一种一种误解:“只要关闭浏览器,session就消失了”。其实可以想象一下会员卡
的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对session
来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一
般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭
之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭。
之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,
而关闭浏览器后这个session id就消失了,再次连接服务器时也就无法找到原来的
session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的
HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的
session。
恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失
效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为
客户端已经停止了活动,才会把session删除以节省存储空间。
Cookie
Cookie定义
“Cookie”是小量信息。由服务器发送出来以存储在浏览器上,从而下次这位访客又回
到该网络服务器时,可从该浏览器读回此信息。


发布评论