【问题标题】:After invalidating session , it's still alive , why?无效会话后,它仍然活着,为什么?
【发布时间】:2014-05-21 21:14:54
【问题描述】:

考虑 servlet:

package controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class LogoutServlet
 */
@WebServlet("/loggingOut")
public class LogoutServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException 
    {
        // Get the session
        HttpSession session = request.getSession(false);

        if(session != null){
            System.out.println("Here ...");
            session.invalidate();
            // forwards to the page logout.jsp
            request.getRequestDispatcher("/WEB-INF/results/logoutResult.jsp").forward(request, response);
            // response.sendRedirect("./WEB-INF/results/logoutResult.jsp");

        }

        else
        {
            System.out.println("There ...");
            // response.sendRedirect("error404.jsp");
            request.getRequestDispatcher("./WEB-INF/results/error404.jsp").forward(request, response);
        }


    }

}

在我使会话无效并移动到 logoutResult.jsp 之后,如果我再次到达上述 servlet 则会话仍然“活动”,并且我没有到达 error404.jsp 的代码,即:

else
{
    System.out.println("There ...");
    // response.sendRedirect("error404.jsp");
    request.getRequestDispatcher("./WEB-INF/results/error404.jsp").forward(request, response);
}

我该如何解决?

非常感谢

【问题讨论】:

  • 因为您在使会话无效后将请求转发到该 jsp
  • 它还没有活着。您有一个新会话。
  • 您没有找到 error404.jsp 的代码,因为它在 WEB-INF 下。不要将 JSP 放在 WEB-INF 下。

标签: java jsp http session servlets


【解决方案1】:

因为每次访问 JSP 时都会创建一个新会话。要禁用此属性,请输入以下指令:

<%@ page session="false" %>

【讨论】:

    【解决方案2】:

    基本上,if(session != null){ 在这里没有任何意义。您应该从会话中读取一个属性并检查它是否为空:

       String username = (String)session.getAttribute("username");
       if(username!=null)
       {
          //user is logged in
       }
       else
       {
         //user is not logged in
       }
    

    【讨论】:

      猜你喜欢
      • 2020-08-02
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      相关资源
      最近更新 更多