session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打
电话是从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个 session。然而当
session 一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含
义。
session 在 Web 开发环境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服
务器端之间保持状态的解决方案。有时候 Session 也用来指这种解决方案的存储结构。
session 机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使
用散列表)来保存息。
但程序需要为某个客户端的请求创建一个 session 的时候,服务器首先检查这个客户端的
请求里是否包含了一个 session 标识-称为 session id,如果已经包含一个 session id 则说
明以前已经为此客户创建过 session,服务器就按照 session id 把这个 session 检索出来使
用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的
session 对象,但用户人为地在请求的 URL 后面附加上一个 JSESSION 的参数)。如果客户
请求不包含 session id,则为此客户创建一个 session 并且同时生成一个与此 session 相关
联的 session id,这个 session id 将在本次响应中返回给客户端保存。
session 机制本身并不复杂,然而其实现和配置上的灵活性却使得具体情况复杂多变。这也
要求我们不能把仅仅某一次的经验或者某一个浏览器,服务器的经验当作普遍适用的。