会话在哪个时间点被视为非活动状态?

时间:2016-01-09 12:53:00

标签: java jsp session servlets

好的,在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调用,该怎么办?

1 个答案:

答案 0 :(得分:0)

这里ajaxChat.jsp中的Ajax代码负责发送和接收消息。因此USer-A和User-B都使用JSP转换和编译后生成的Servlet的输出。所以,不要认为它是ajaxChat.jsp页面正在两个用户之间进行通信。

对于标记来自用户的活动的每5分钟后发出的服务器请求,不管正常用户操作或Ajax调用的调用。两者都是服务器的等价物。这意味着服务器不会将其视为非活动会话。

如果您想让您的应用程序在15分钟后出现会话过期的行为,则需要自行处理。

您可以使用特定页面/调用中用户的上一个活动时间来管理应用程序上下文中的映射(键作为JSESSIONID cookie值),这些时间被解释为来自用户而不是来自Ajax Chat的操作。每次测试差异(上次活动时间 - 当前时间)并将会话标记为sesion.invalidate()时显式过期。