为什么会话不为空

发布于 2024-12-07 14:59:54 字数 524 浏览 0 评论 0原文

我使用以下代码将用户传送到欢迎页面(如果他们已经登录),或者返回到登录页面(如果他们还没有登录)。

        HttpSession session = request.getSession(false);

    if(session == null){
        request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
    }else{
        //User already logged in. Send to home.
        response.sendRedirect("Welcome");
    }

第一次,它工作得很好,但是如果我重新加载页面,即使它将用户发送到欢迎页面,也不可避免地向我发送回 500 错误,因为该页面上的某些元素无法加载,因为用户登录代码有没有被处决。

即使重新加载页面时未声明 request.getSession(true) ,会话也会自动启动吗?有办法防止这种情况吗?

I am using the following code to delivery the user to a Welcome page if they are already logged in, or back to the login page if they are not.

        HttpSession session = request.getSession(false);

    if(session == null){
        request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
    }else{
        //User already logged in. Send to home.
        response.sendRedirect("Welcome");
    }

First time around, it works fine, but if I reload the page even once it sends the user to the welcome page and inevitably sends me back a 500 error because there are elements on that page that cannot be loaded because the user log in code has not been executed.

Does a session get started automatically even if request.getSession(true) is not declared when a page is reloaded? Is there a way to prevent this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绻影浮沉 2024-12-14 14:59:54

会话可能是在转发到 login.jsp 时创建的。这是必要的,因为必须将用户分配给未经身份验证的请求,然后对其进行身份验证。如果您想根据用户是否登录进行重定向,请使用 SessionContextgetCallerPrincipal

有关详细信息,请查看这篇(有些旧,但仍然相关)文章

Probably the session is being created upon forwarding to login.jsp. That's necessary because the user has to be assigned to an unauthenticated request and then authenticate it. If you want to redirect based on whether the user is logged in or not, use SessionContext's getCallerPrincipal.

For more info, check this (somewhat old, but still relevant) article

攒眉千度 2024-12-14 14:59:54

如果没有当前会话,request.getSession(false) 方法将返回 null。我建议也比较一个密钥。

请看看这个线程。

  1. JSP 是否总是创建会话?
  2. 如何Servlet 可以工作吗?实例化、会话变量和多线程

The method request.getSession(false) returns null if there is no current session. I suggest to compare a key too.

Please take a look at this threads.

  1. Do JSPs always create a session?
  2. How do servlets work? Instantiation, session variables and multithreading
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文