浅谈-HttpSession session = request.getSession(false)

发布时间 2023-08-04 14:53:13作者: wrhiuo

当使用 request.getSession(false) 方法时,如果当前请求没有关联的会话,则不会创建新的会话,而是返回 null。这意味着,如果当前客户端没有携带有效的会话标识符(如 JSESSIONID),或者会话已过期或被销毁,则 request.getSession(false) 方法将返回 null

下面是一个示例来解释这个方法的用法:

假设有一个简单的 Servlet,它用于检查用户是否登录。如果用户已经登录,则显示欢迎消息;如果用户未登录,则跳转到登录页面。

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;

@WebServlet("/welcome")
public class WelcomeServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 获取当前会话,但不创建新的会话
        HttpSession session = request.getSession(false);

        if (session != null && session.getAttribute("username") != null) {
            // 用户已登录,显示欢迎消息
            String username = (String) session.getAttribute("username");
            response.getWriter().println("Welcome, " + username + "!");
        } else {
            // 用户未登录,跳转到登录页面
            response.sendRedirect("login.html");
        }
    }
}

在上面的示例中,我们使用了 request.getSession(false) 方法来获取当前请求的会话,但不创建新的会话。如果用户已经登录,会话中有存储用户名的属性(如 "username"),则显示欢迎消息;否则,重定向到登录页面。

这样,我们可以通过 request.getSession(false) 方法来检查用户是否已登录,而不会创建新的会话,避免不必要的会话创建和资源浪费。