【问题标题】:Session logging out in 30 min irrespective of activity会话在 30 分钟内注销,无论活动如何
【发布时间】:2013-03-21 15:35:06
【问题描述】:

我在 web.xml 中将 设置为 30 分钟。如果我没记错的话,这个应该只有在会话处于非活动状态时才在 30 分钟内注销会话。但是在我的应用程序中,无论活动如何,用户都会在 30 分钟内注销。谁能帮我解决这个问题?我不是问题所在。

【问题讨论】:

  • 您在 web.xml 中将 30 分钟设置为多少?如果您将会话生命周期设置为 30 分钟,则它应该是 30 分钟的不活动时间,而不是 30 分钟的时间段(cookie 过期时间应该刷新每个对服务器的请求)。尝试在几次页面浏览后检查浏览器中的 cookie 过期时间,看看是距离该页面浏览 30 分钟还是距离您的第一个页面浏览 30 分钟。
  • 我猜你的所有活动都以某种方式发生在会话之外。可能 cookie 不会与其他活动或类似的东西一起发送。
  • 感谢您的回复。抱歉,在 html 翻译中丢失了文本。会话超时设置为 30 分钟。好的,我去试试cookie过期时间看看。
  • 谢谢亚历克斯。如何确定 cookie 是否与其他活动一起发送?
  • 为域和路径设置了 Cookie;如果您对该域和路径执行请求,浏览器会自动发送(会话)cookie。如果您的 ajax 请求发生在与您获取 cookie 的路径完全不同的路径上(例如在表单登录之后),您的 cookie 可能永远不会被发送和刷新

标签: java web.xml session-timeout


【解决方案1】:

检查您是否在每个请求中都获得了新会话。一个简单的方法是在会话中存储一个 Integer 并随着每个请求增加它。然后将整数的值(作为整数或字符串)添加到响应中并将其显示在页面上(如果需要,显示可能会将其作为隐藏字段添加到页面中)。

【讨论】:

  • 我认为在每个请求上获得一个新会话是非常明显的——可以说会话在 30 分钟后到期更明显(假设用户可能在 30 分钟内停止使用)。
【解决方案2】:

可能导致会话意外超时的原因有很多,如果没有更多信息,我只能提供一些指示和建议。

  1. 您使用集群吗?如果这样做,请检查负载均衡器的算法和设置。用户请求是否在 30 分钟后转发到集群中的其他服务器?您是否在集群中配置了会话复制?另一种确保负载均衡器不是罪魁祸首的简单方法是关闭集群中除一个之外的所有其他服务器。因此,可以保证将请求发送到同一台服务器。然后,您可以检查 30 分钟超时是否仍然发生,无论用户活动如何。服务器访问日志还可以帮助您查看用户是否在服务器之间跳转。
  2. 如果您安装了ieHTTPHeaders等浏览器插件,请检查每个请求发送的会话cookie,看看是否有任何变化。
  3. 另一个问题是,如果您将 web.xml 中的 30 分钟超时更改为 15 分钟,那么无论用户活动如何,用户是否每 15 分钟超时一次?

【讨论】:

    猜你喜欢
    • 2017-06-27
    • 2014-10-21
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2013-04-19
    • 2020-01-30
    相关资源
    最近更新 更多