1

我是新来的强文本,需要一种适当的方法来验证。我跟着

5行代码。它没有 httpsession 但仍会去约会.jsp。为什么这样?我跟着如何检查会话是否存在?

它正在举行会议。org.apache.catalina.session.StandardSessionFacade@3b59e880 但用户未登录...

确实如此。但我不知道为什么以及如何得到一个?

if (request.getSession(false) == null) {
    request.getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
} else if (request.getSession(false) != null) {
    request.getServletContext().getRequestDispatcher("/appointment.jsp").forward(request, response);
}
4

4 回答 4

2

用户登录后不会创建会话,它是在浏览器对容器的第一次请求时创建的。这使容器能够跟踪来自同一浏览器的后续请求。这通常使用具有唯一 ID(会话 ID)的 cookie 来实现。

所以即使它取决于用户注销时发生的事情?你在调用 session.invalidate() 吗?我们不能仅仅因为会话对象不为空就说用户已通过身份验证。

于 2012-12-28T14:46:23.593 回答
1

总会有一个 HttpSession 对象(好吧,并非总是如此,但大多数时候) - 这不是经过身份验证的用户的指标。

您需要设置会话属性,例如。“已验证”将此会话标记为已验证或未验证。

您可以通过调用 request.getSession().setAttribute(...) 添加它

于 2012-12-28T14:52:56.470 回答
1

默认情况下,JSP 将创建一个会话。您可能不希望您的登录页面出现这种行为,因此请使用以下页面指令login.jsp

<%@ page session="false" %>

您还需要确保在成功登录之前访问的任何其他 JSP 不会创建会话。

于 2012-12-28T14:57:59.487 回答
0
if (request.getSession(false).getAttribute("userLoggedIn") != null ) {
    if((Boolean)request.getSession(false).getAttribute("userLoggedIn") ) {
        request.getServletContext().getRequestDispatcher("/appointment.jsp").forward(request, response);
    }
} else {
    request.getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
}
于 2012-12-28T18:59:31.390 回答