2

我有两个问题,

  1. 当 JSP 具有<%@page session="false" %>. 在我的 Web 应用程序中,我在登录时从 servlet 创建一个新会话,request.getSession()之后使用和设置属性。但是我的 JSP 页面不包含<%@ page session="false" %>,我使用 JSTL 标记来显示存储在会话和请求中的数据。调试后,我可以看到新会话是随机创建的。如果我添加<%@ page session="false" %>到 JSP 页面以确保不会创建新会话,会不会有任何影响?

  2. 另外,我在 web.xml 中设置了 15 分钟的超时时间。通常,如果超过 15 分钟不活动,我的应用程序就会超时。但偶尔,它会在 1 或 2 分钟内超时。我不理解这种奇怪的行为。这是否与正在创建的新会话有关。当它超时时,我看到创建了一个具有不同会话 ID 的新会话。在我的代码中,我检测到超时如下,

    if (request.getRequestedSessionId() != null
        && !request.isRequestedSessionIdValid()) {
        // redirect to a login page with a message
    }
    
4

1 回答 1

0
  1. 当您<%@page session="false" %>在 JSP 中编写指令时,这会 HttpSession session = request.getSession();从其自动生成的 servlet 的 java 源代码中删除该行。所以不,如果你一开始不抓住它,你就不能访问页面中的会话信息。

  2. 如果它在比 web.xml 中设置的时间更长的时间后超时就可以了,但如果它更早地超时就不行了。你的应用程序中一定有一些你没有想到的东西,比如对session.invalidate()某个地方的调用。

于 2013-01-04T17:58:52.780 回答