3

我希望定期为每个具有会话的用户运行一个函数,以检查用户是否处于活动状态。如果未激活,该函数将从 servlet 上下文中的用户列表中删除用户并清除用户会话。

我可以使用什么来为每个用户定期运行该功能?

据我了解,servletcontextlistener 在 servlet 的生命周期内只运行一次,而不是为每个用户运行一次,因此它不可用。此外,建议不要在 servlet 中使用线程。

编辑:用户(使用 ajax)调用一个操作,其中包含更新我为每个用户存储的变量的函数,该变量指示他们最后一次联系服务器。

4

2 回答 2

2

您可能正在寻找javax.servlet.http.HttpSessionListener. 创建一个,注册它web.xml并让sessionDestroyed你做你的工作。

于 2012-04-11T03:40:00.767 回答
1

我可以想到两种方法:

  1. 使用 request.getSession().setMaxInactiveInterval(someValue)

  2. 由于您使用的是 ajax,因此您不妨发送实际的“终止会话”请求,而不是发送“用户活动”值。这意味着更少的 http 调用,因为用户是否处于活动状态的逻辑在客户端,而实际的“会话终止”逻辑在后端。所以这里是场景:

    Javascript 代码每分钟运行一次以检查用户是否处于活动状态(不确定您实际在看什么,但那是另一回事)。如果在 5 分钟后用户没有在客户端执行任何操作,那么将向后端发送一个 ajax 调用以终止会话。

于 2012-04-11T03:53:41.517 回答