当<%@ page session =“false”%>时,在JSTL中访问会话范围的变量

时间:2012-10-21 16:46:00

标签: java session servlets jstl

我有两个问题,

  1. 当JSP有<%@page session="false" %>时,我是否可以使用JSTL标记访问会话范围的变量。在我的Web应用程序中,我在登录时使用request.getSession()从servlet创建一个新会话,然后设置属性。但是我的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
    }
    

1 个答案:

答案 0 :(得分:0)

  1. 当您在JSP中编写指令<%@page session="false" %>时,它会从其自动生成的servlet的java源代码中取出行HttpSession session = request.getSession();。所以不,如果您没有首先获取会话信息,则无法访问页面中的会话信息。

  2. 如果它在比web.xml中设置的时间更长的时间后超时,那就没关系,但如果超时则超时。您的应用中必定存在一些您没有想到的内容,例如在某处调用session.invalidate()