【问题标题】:Accessing session scoped variable in JSTL when <%@page session="false" %><%@page session="false" %> 时访问 JSTL 中的会话范围变量
【发布时间】:2012-10-11 14:00:05
【问题描述】:

我有两个问题,

  1. 当 JSP 具有 &lt;%@page session="false" %&gt; 时,我可以使用 JSTL 标记访问会话范围的变量吗?在我的 Web 应用程序中,我在登录时从 servlet 创建一个新会话,使用 request.getSession() 并在此后设置属性。但是,我的 JSP 页面不包含 &lt;%@ page session="false" %&gt;,并且我正在使用 JSTL 标记来显示存储在会话和请求中的数据。调试后,我可以看到新会话是随机创建的。如果我在 JSP 页面中添加&lt;%@ page session="false" %&gt; 以确保不会创建新会话,会有什么影响吗?

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

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

【问题讨论】:

    标签: java session servlets jstl


    【解决方案1】:
    1. 当您在 JSP 中编写指令 &lt;%@page session="false" %&gt; 时,这会从其自动生成的 servlet 的 java 源代码中删除行 HttpSession session = request.getSession();。所以不,如果你一开始不抓住它,你就无法访问页面中的会话信息。

    2. 如果它在比 web.xml 中设置的时间更长的时间后超时是可以的,但如果它更早超时则不是。你的应用中一定有一些你没有想到的东西,比如在某处调用session.invalidate()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 2012-05-26
      相关资源
      最近更新 更多