[SEAM] 对seam中何为“对话超时”的调查
yourenyouyu2008
2008-10-05
设置
session超时30分钟 对话超时10分钟 请问点击一个链接开始了一个长久对话后,操作者就去上厕所了,15分钟后在当前页面继续操作时会不会报对话超时? 请大家积极回答 |
|
yourenyouyu2008
2008-10-06
为什么大家只是看而不回答呢,有什么问题可以提出来嘛。
|
|
yourenyouyu2008
2008-10-08
对“对话超时”的理解有很多误解,我当初也是想当然的认为的,后来却发现不是,仔细研究了源码才明白如何。目的是想调查下对这个概念的理解。
|
|
yourenyouyu2008
2008-10-08
不会超时
|
|
yourenyouyu2008
2008-10-08
虽说是超过了对话时间,但只有session还没超时,当前对话就不会超时。
|
|
dearshor
2008-11-10
我认为,conversation在10分钟以后会timeout,然后用户如果继续操作,会新建一个conversation。如果你的app设计成REST风格,完全不会受conversation超时,服务端状态丢失的影响的话,你不会有任何异常感觉,这一切对你是透明的。于是就误以为conversation没有timeout。
最简单的检验办法是,看一下conversationId变了没有。 |
|
SSailYang
2008-11-11
如果不会超时,那超时时间又是干什么用的?session 超时和 coversation 超时是不同的,coversation 实际上是 session 中的一小块区域,或者说是子集,由 conversation id 标示。
|
|
yourenyouyu2008
2008-11-24
看来正如seam作者之一所说,很多人对对话超时存在误解,想当然的拿它与session超时做对比。对话超时是由seam来控制的,而不是由webserver来控制的(session就是),他是在请求提交后才去判断的,请求提交后首先更新当前对话的最后访问时间,然后在请求结束后去判断每个长久对话是否超时,由于在请求一开始就更新了最后访问时间,所以当前对话是不会超时的,超时的只是是非当前对话。
对话超时的作用就是当你打开了多个长久对话,超时时间到后非当前的长久对话会超时而从内存中清除掉。这与sessin是不同的,只要你一直不停地在访问服务器,即使某些session中的东西你不用了,它也会一直存在与内存中。 |
|
dearshor
2008-11-30
yourenyouyu2008 写道
看来正如seam作者之一所说,...
能否将原文链接贴出?让我也拜读一下。
yourenyouyu2008 写道
他是在请求提交后才去判断的,请求提交后首先更新当前对话的最后访问时间,然后在请求结束后去判断每个长久对话是否超时,由于在请求一开始就更新了最后访问时间,所以当前对话是不会超时的
如此说来,在当前session timeout前,当前conversation是不会timeout的,即便它达到了设置的conversation timeout时间。
但我有疑问了,为什么要“请求提交后首先更新当前对话的最后访问时间,然后在请求结束后去判断每个长久对话是否超时”呢?这样设计的目的何在?既然当前session没有timeout,那么seam完全知道从“上一次最后访问时刻”到“这一次请求访问时刻”之间隔了多少时间,然后拿这个时间和“设置的conversation timeout时间”去比较,马上能判定有没有超过这个“设置的conversation timeout时间”了,也就能做出conversation是否超市的判断了。 |