在会话无效后,我的会话没有变为空

时间:2014-02-28 05:17:41

标签: java servlets httpsession

您好任何人都可以告诉我以下代码中的问题。在下面的代码中,我通过使用http session.getsession(true)创建新会话并设置属性后使我的会话无效。一旦我点击注销,我就会使会话无效,但这不会变为空。

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

HttpSession sess = request.getSession(false);
sess.removeAttribute("name");
sess.invalidate(); 
System.out.println("sess"+sess);

2 个答案:

答案 0 :(得分:1)

会话无效意味着服务器会忘记它,所以一旦再次调用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%的比例重新创建会话。否则它将打印存储的密钥。

答案 1 :(得分:1)

正如API所说,

  

使此会话无效,然后取消绑定绑定到它的任何对象。

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