无法在java servlet中取消设置会话

时间:2017-04-11 11:49:40

标签: java jsp session servlets

我有一个logout.jsp页面,用于使会话无效,以下是其内容:

session.invalidate();
response.sendRedirect("login.jsp");

在我的profile.jsp页面中,我想检查是否设置了会话变量,具体取决于允许用户浏览页面或重定向回登录页面(如果未设置会话变量)

if(request.getSession(false)==null){
    response.sendRedirect("login.jsp");
}

但问题是,这不能直接从地址栏打开profile.jsp页面,即使没有用户登录,也会打开而不会重定向到登录页面。进一步打印{{1}我得到输出request.getSession(false)。我不知道这是什么,并且没有在互联网上发现任何相关信息。那么如何解决这个问题。

编辑:

班级'用户'我使用的对象作为会话变量实现了可序列化,因此可能是我面临的问题的原因。

我不被允许评论所以我在这里提到它。 我使用chrome接受cookie ....此外我在Microsoft Edge中尝试过相同但它仍然是相同的

1 个答案:

答案 0 :(得分:0)

我假设您已经创建了用于登录和注销的servlet,然后从相应的servlet可以重定向到该页面: 这可能是您的登录servlet代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String email = request.getParameter("email");
    String password = request.getParameter("password");
    HttpSession session = request.getSession();
    session.setAttribute("userName", email);
    session.setAttribute("password", password);
   getServletContext().getRequestDispatcher("/profile.jsp").forward(request, 
    response);
    }

这可以是你的profile.jsp页面代码来检查会话:

 <%
if(!(request.getSession(true).getAttribute("userName").toString()).isEmpty()){
  String firstName = (String)request.getAttribute("firstName");
 String lastName = (String)request.getAttribute("lastName");
 }else{%>
 <jsp:forward page = "Login.jsp" />
<% }%>

从注销页面,您只需向logoutservlet发送请求即可。而且,这可以是你的logoutservlet代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    HttpSession session = request.getSession();
    session.invalidate();
    out.println("Logout Successful");
    out.println("Username : "+session.getAttribute("userName"));
    out.println("Password : "+session.getAttribute("password"));

}

之后当我从会话中获取凭据时,我将获得这些字段的空值。