httpsession验证是否存在

时间:2012-12-28 14:43:13

标签: java jsp servlets

强文我是新手,需要一种正确的验证方式。我跟着

5行代码。它有一个httpsession,但仍然会到appointment.jsp。为什么这样? 我跟着How to check if session exists or not?

它正在开会。 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 个答案:

答案 0 :(得分:2)

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

所以即使这取决于用户注销时发生了什么?你在调用session.invalidate()吗? 我们不能说用户认证只是因为会话对象不是空的。

答案 1 :(得分:1)

总会有一个HttpSession对象(确定,并非总是如此,但大部分时间都是这样) - 这不是经过身份验证的用户的指示器。

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

您可以通过调用request.getSession()。setAttribute(...)

来添加它

答案 2 :(得分:1)

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

<%@ page session="false" %>

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

答案 3 :(得分: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);
}