好的,在Java中,我不明白什么动作告诉会话是什么,不活着。
我曾经认为,如果用户从未触摸过该页面,经过一段时间后,会话将会过期。
session.setMaxInactiveInterval(15 * 60); // 15分钟
但是请说有一个页面调用ajaxChat.jsp
,它具有在客户端和服务器之间往返发送数据的功能。
UserA已登录&创建了一个会话。然后他可以输入ajaxChat.jsp
。 UserB有时会通过ajaxChat.jsp
上的界面向UserA发送消息。
UserA就住在ajaxChat.jsp
&做点别的。然而,UserB每隔5分钟向UserA发送一条消息。
问题是,如果UserA刚离开ajaxChat.jsp
而没有触及它超过30分钟,那么用户A的会话是否会过期?请注意,每隔5分钟,ajaxChat.jsp
会收到来自UserB的新消息。
我不明白当会话到期时,Java Session如何工作?
哪些操作告诉会话是否活着?
在哪个时间点会话被视为非活动状态?
如果用户从未触摸过该页面,但该页面在后台定期进行了一些Ajax调用,该怎么办?
答案 0 :(得分:0)
这里ajaxChat.jsp中的Ajax代码负责发送和接收消息。因此USer-A和User-B都使用JSP转换和编译后生成的Servlet的输出。所以,不要认为它是ajaxChat.jsp页面正在两个用户之间进行通信。
对于标记来自用户的活动的每5分钟后发出的服务器请求,不管正常用户操作或Ajax调用的调用。两者都是服务器的等价物。这意味着服务器不会将其视为非活动会话。
如果您想让您的应用程序在15分钟后出现会话过期的行为,则需要自行处理。
您可以使用特定页面/调用中用户的上一个活动时间来管理应用程序上下文中的映射(键作为JSESSIONID cookie值),这些时间被解释为来自用户而不是来自Ajax Chat的操作。每次测试差异(上次活动时间 - 当前时间)并将会话标记为sesion.invalidate()时显式过期。