使某些页面上的javax.servlet.http.HttpSession不会超时

时间:2011-02-03 23:33:03

标签: java servlets session-timeout

我正在重构一个正在进行自己的会话超时管理的应用程序。我注意到HttpSession支持设置超时值。

有一个事件监听器(我假设为HttpSessionListener)正在重定向到“超时”页面。 “我们很抱歉你的会话已经过期,这是一个指向登录页面的链接”。有点像。

问题是,当我第一次点击应用程序并坐在登录页面上时,会话超时事件仍然会触发。所以我可以查看登录页面并重定向到超时页面。

我想要发生的是,如果我在登录页面上并且只在登录页面上,那么会话超时不会发生。我该怎么做?

我已经尝试在登录的ActionBean中的默认视图分辨率中调用HttpSession.setMaxInactiveInterval(-1),但这不起作用。

我相信无论何时访问任何页面,都会创建会话,但不一定经过身份验证。

1 个答案:

答案 0 :(得分:0)

你在哪里进行重定向?如果它是以声明方式设置在配置文件中的某个位置,您可以将其删除并实现HttpSessionListener接口。

在sessionDestroyed方法中,您将进行以下操作:

  • 从sessionEvent获取会话
  • 如果会话包含身份验证标志,则重定向

U还可以保留用户请求的最后一页,并将其用作参考来确定是否重定向,但如果用户已经过身份验证并浏览到登录页面,您会怎么做?我没有关于您的申请的大量信息。

无论如何,HttpSessionListener是我想的方式。