Java 在使会话无效后,我的会话未变为空

Java 在使会话无效后,我的会话未变为空,java,servlets,httpsession,Java,Servlets,Httpsession,您好,任何人都可以告诉我以下代码中会出现什么问题。在下面的代码中,我使用http session.getsession(true)创建了新会话并设置了属性,从而使会话无效。单击注销后,我将使会话无效,但不会变为null 这里我没有得到nullSystem.out.println(“sess”+sess) 使会话无效意味着服务器会忘记它,所以一旦您再次调用getSession(),您将收到新会话。现有变量(sess)不受影响,只是不存储在servlet容器内部。因此,没有理由在代码中将变量设置为n

您好,任何人都可以告诉我以下代码中会出现什么问题。在下面的代码中,我使用http session.getsession(true)创建了新会话并设置了属性,从而使会话无效。单击注销后,我将使会话无效,但不会变为null

这里我没有得到nullSystem.out.println(“sess”+sess)


使会话无效意味着服务器会忘记它,所以一旦您再次调用getSession(),您将收到新会话。现有变量(sess)不受影响,只是不存储在servlet容器内部。因此,没有理由在代码中将变量设置为null

    HttpSession session = request.getSession();
    Date date = (Date) session.getAttribute("TEST");
    System.out.println("date = " + date);
    if (date == null) {
        session.setAttribute("TEST", new Date());
    }
    if (new Random(System.currentTimeMillis()).nextInt(10) > 7) {
        session.invalidate();
    }
将此代码放入servlet并查看容器日志。它将以30%的速度重新创建会话,否则将打印存储的密钥。

如前所述

使该会话无效,然后解除绑定到该会话的所有对象


它不需要为null,它只是解除对象的绑定。您可以检查以前设置的属性是否仍在会话中。

那么如何检查我的会话是否无效?请详细说明您的答案。为什么可能成为新会话。我没有创建任何会话。例如,在会话中插入保留当前日期的新密钥。当您获得会话时,尝试查找并打印它,否则设置它。然后使会话无效并重新加载。嗯,我宁愿发一些code@user3214269request.getSession(false);将不会返回任何新会话,相反,它将返回以前创建的会话,如果以前没有创建会话,则返回null。我只想检查我的会话是否无效。如果会话失效或为空,我会将我的用户回退到登录页面,这就是我希望在我的程序中发生的事情。那么如何检查我的会话是否失效?你能详细说明你的答案吗。
    HttpSession session = request.getSession();
    Date date = (Date) session.getAttribute("TEST");
    System.out.println("date = " + date);
    if (date == null) {
        session.setAttribute("TEST", new Date());
    }
    if (new Random(System.currentTimeMillis()).nextInt(10) > 7) {
        session.invalidate();
    }