Servlet会话超时

3

我正在编写我的Spring MVC网络应用程序。

我已将会话超时设置为10080分钟,即1周。现在我想让用户在每次打开浏览器时都保持登录状态:

sessionService.setcurrentUser(myuser);
      HttpSession session = request.getSession();
      Cookie cookie = new Cookie("JSESSIONID", session.getId());
      cookie.setMaxAge(timeout);
      response.addCookie(cookie);

我的Cookie Max Age是否应该与会话超时时间相同?

cookie.setMaxAge(10080);

这是一个好习惯吗?


请注意,setMaxAge参数的值以秒为单位,而session-timeout以分钟为单位--您需要将10080乘以60才能得到您要查找的最终结果。 - Vladimir
3个回答

7
您应该在web.xml中进行配置,而不是通过篡改默认的会话cookie。
<session-config>
    <session-timeout>10080</session-timeout>
</session-config>

请注意,不要在会话中存储过多数据,同时确保您的服务器具有足够的内存。

这样行不通。默认情况下(至少在Tomcat上),当浏览器关闭时,会话将变为无效。这是因为会话cookie的年龄(如果适用)被设置为“0”。 - wh81752
@user 我回答了这个问题,而不是功能需求。你是对的,这个答案不适用。无论如何,我以前已经回答过这样的问题几次了。 - BalusC

1

您可以使用 cookie 来引用您的会话 ID。如果 cookie 的超时时间低于会话时间,它将无法再找到您的会话。因此,建议将 cookie 的超时时间设置为至少与会话超时时间相同。


1
这个回答没有意义。会话的ID(JSESSIONID)通过cookie的机制(或者URL重写的方式)转发到Servlet容器中。因此,从用户的角度来看,如果cookie超时,则会话将消失。如果cookie的超时时间大于会话空闲超时时间(web.xml/session-config/session-timeout),则容器可能会在cookie的最大年龄达到之前使会话无效。 - wh81752

1
以下帖子包含有趣的信息。就良好的实践而言,您可能需要考虑两件事情:
  • 长时间保持会话活动的安全性方面。
  • 内存影响,您的会话将被序列化,并且您希望将其最小化。特别是如果用户数量可能会急剧增长。
讨论 1
讨论 2
讨论 3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接