2024年4月28日发(作者:)

摘要................................................................................................................................. 2

一、术语 2

二、HTTP协议与状态保持 .............................................................................................. 3

补充:Cookie和session机制之间的区别和联系 ............................................................... 3

三、理解cookie机制........................................................................................................ 3

补充:cookie的内容 ........................................................................................................ 3

四、理解session机制....................................................................................................... 4

补充:传送session的方法 ............................................................................................... 4

方法一:作为URL路径的附加信息 .......................................................................... 5

方法二:表单隐藏字段.............................................................................................. 5

补充:Session的删除 ....................................................................................................... 5

补充:seesion设置了一个失效时间 .................................................................................. 5

五、理解ssion ............................................................................... 5

六、HttpSession常见问题(在本小节中session的含义为⑤和⑥的混合) ......................... 6

1、session在何时被创 ............................................................................................... 6

2、session何时被删除 ............................................................................................... 6

4、有个HttpSessionListener是怎么回事..................................................................... 6

5、存放在session中的对象必须是可序列化的吗 ....................................................... 6

6、如何才能正确的应付客户端禁止cookie的可能性 ................................................. 6

8、如何防止用户打开两个浏览器窗口操作导致的session混乱 .................................. 7

七、跨应用程序的session共享.................................................................................. 7

八、总结.......................................................................................................................... 8

摘要

虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚

session机制的本质,以至不能正确的应用这一技术。本文将详细讨论session的工作机制并

且对在Java web application中应用session机制时常见的问题作出解答。

一、术语session

在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是

transaction与session在某些语境下的含义是相同的。session,中文经常翻译为会话,其本来

的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间

的一系列过程可以称之为一个 session。有时候我们可以看到这样的话“在一个浏览器会话期

间,...”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间 ①。

最混乱的是“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动作(一

般情况下是同某个具体目的相关的一系列动作,比如从登录到选购商品到结账登出这样一个

网上购物的过程,有时候也被称为一个transaction),然而有时候也可能仅仅是指一次连接,

也有可能是指含义

① 其中的差别只能靠上下文来推断

②然而当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”

这样两个含义, “面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道,比如

打电话,直到对方接了电话通信才能开始,与此相对的是写信,在你把信发出去的时候你并

不能确认对方的地址是否正确,通信渠道不一定能建立,但对发信人来说,通信已经开始了。

“保持状态”则是指通信的一方能够把一系列的消息关联起来,使得消息之间可以互相依赖,

比如一个服务员能够认出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱。这一类

的例子有“一个TCP session”或者 “一个POP3 session”

③而到了web服务器蓬勃发展的时代,session在web开发语境下的语义又有了新的扩展,

它的含义是指一类用来在客户端与服务器之间保持状态的解决方案

④有时候session也用来指这种解决方案的存储结构,如“把xxx保存在session 里”

⑤由于各种用于web开发的语言在一定程度上都提供了对这种解决方案的支持,所以在

某种特定语言的语境下,session也被用来指代该语言的解决方案,比如经常把Java里提供

的ssion简称为session

⑥鉴于这种混乱已不可改变,本文中session一词的运用也会根据上下文有不同的含义,

请大家注意分辨。

在本文中,使用中文“浏览器会话期间”来表达含义①使用“session机制”来表达含义,使

用“session”表达含义,使用具体的“HttpSession”来表达含义