【问题标题】:HttpRequest object after session times out for a web applicationWeb 应用程序会话超时后的 HttpRequest 对象
【发布时间】:2014-09-14 00:15:30
【问题描述】:

我想知道请求对象在会话超时时的行为。 更具体地说,我遇到了一种情况,我无法弄清楚到底发生了什么。

剧情是这样的,

我的 Web 应用程序有一个登录页面,其中包含用户名和密码字段。我已将我的应用程序的超时设置为 10 分钟。 我在登录页面上 15 分钟无所事事,所以会话超时。

现在在登录时,我输入用户名和密码并点击提交。页面正在刷新而不是提交。

所以我可以说在会话超时时,请求对象也超时了吗?

【问题讨论】:

  • 您可能需要发布一些最少的代码来更好地说明您的问题。仔细阅读stackoverflow.com/tour

标签: java jakarta-ee


【解决方案1】:

由于您没有在问题中添加任何代码,因此我的解释应该持保留态度。

恕我直言,当客户端请求登录页面(在他提交登录页面之前)时,您正在启动会话,并且您已经设置它以便属于超时会话的请求将被重定向到登录页面。

因此,如果结果不符合您的喜好,您必须更改以上部分内容。

但同样,为了获得更好的答案,您必须向我们展示一些代码。

关于请求超时的问题。不,它没有超时。只有当服务器没有及时响应时才会超时(这是一种不同的超时)

我添加了一些 Java 代码部分,用于将属于超时的会话的请求定向到登录页面。顺便说一句,我还应该添加在此重定向之前处理不需要会话的请求。

HttpSession session = request.getSession(false);
boolean hasActiveSession;
if (session == null) {
  hasActiveSession = false;
  //...
}
//...
if (!hasActiveSession) {
  request.setAttribute("alert","Your session has timed out");
  request.getRequestDispatcher("/WEB-INF/Login.jsp").forward(request, response);
}

【讨论】:

  • 非常感谢 Nuri 的回复 :)。所以即使会话超时,请求也可以由容器服务,对吧?这意味着如果我们以您的示例为例,如果用户的会话超时,用户将被转发到登录页面。现在在登录页面上,用户再次等待假设 15 分钟(会话再次超时)。现在用户输入用户名和密码并按提交。这个请求是否会被处理,比如说通过一个为登录 url 模式配置的过滤器?或者登录页面的新请求进入容器(导致刷新)?提前致谢。
  • 如果您在重定向时打开一个新会话并且用户再次等待新会话超时,是的,他将再次被重定向。在您的情况下,服务登录页面真的需要新会话吗?如果没有,请在登录完成后开始一个新会话,并且只重定向应该具有有效会话的请求。
猜你喜欢
  • 2019-06-23
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
相关资源
最近更新 更多