【问题标题】:JSP session is not nullJSP 会话不为空
【发布时间】:2012-07-07 14:51:56
【问题描述】:

我是 JSP 的新手,在我的 webapp 的特定页面上,我试图确定用户是否已登录。为此,我正在检查会话是否存在。如果会话不存在,那么我会将用户重定向到登录页面。

我对以下代码感到困惑

<%
if (null == session)
    out.println("session is null");
else
    out.println("session is not null");

if (null == request.getSession(false))
    out.println("request.getSession() is null");
else
    out.println("request.getSession() is not null");
%>

在任何情况下都会产生以下输出:

session is not null request.getSession() is not null 

我不明白为什么会话存在,即使我没有创建它。如何查看用户是否登录?

提前致谢。

【问题讨论】:

    标签: java jsp session


    【解决方案1】:

    默认情况下,会话是由容器为您创建的。对于 JSP 使用

    <%@ page session="false" %>
    

    在您的 JSP 上禁用会话创建。

    为了检查用户是否存在,您需要在用户登录后在服务器端的会话中放置一些令牌/密钥。喜欢

    request.getSession().setAttribute("usertoken","authenticated");
    

    在 JSP 上只需检查属性是否存在而不是 null

    if ("authenticated".equals(session.getAttribute("usertoken")) {
       // do something
    }
    

    【讨论】:

      【解决方案2】:

      只要有用户浏览您的网站,就会有一个会话。检查用户是否登录不应依赖于“会话存在”,因为它们是非常不同的概念。

      您可以在用户登录时将会话属性存储在会话对象中,并在他/她注销时将其删除。但我建议配置“基于容器的身份验证”,这样您就不需要在会话中存储任何属性,并且可以使用请求方法“getUserPrincipal()”和“getRemoteUser()”来了解用户是否登录。此外,这种身份验证被证明更安全,并且符合 JavaEE 原则。

      要获得有关如何设置容器管理身份验证的一些说明,您可以查看 SO 中的其他问题: Performing user authentication in Java EE / JSF using j_security_check

      【讨论】:

        【解决方案3】:

        您可以将用户设置为会话属性并检查其是否存在,而不是检查整个会话是否存在。

        【讨论】:

          【解决方案4】:

          web 容器为每个用户会话保存一个唯一的会话标识符。当用户在 web 应用程序中请求另一个页面时,会话标识符与 HttpSession 对象一起返回给 servlet。

          HttpSession getSession() - 如果它是有效的,总是返回一个与该请求关联的httpsession对象,如果无效将创建一个新的会话对象。

          HttpSession getSession(boolean create) - 如果它有效则返回与此请求关联的 httpsession 对象,但如果无效则仅当“create”输入为“true”时才创建新的会话对象。

          【讨论】:

            【解决方案5】:

            我想在@jdevelop 的回答上再补充一点:

            一旦您在 JSP 页面中写入 &lt;%@ page session="false" %&gt;session 对象将直接变为不可用。这就是为什么你必须使用request.getSession(false)(当然你必须添加null检查)来访问会话对象。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-02-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-03-08
              • 2012-12-07
              • 2012-12-02
              • 1970-01-01
              相关资源
              最近更新 更多