【问题标题】:HttpSessionEvent getSession().getId() returning same Id even after session is invalidated on Websphere not on TomcatHttpSessionEvent getSession().getId() 返回相同的 ID 即使在 Websphere 上而不是 Tomcat 上的会话无效后
【发布时间】:2016-03-17 08:18:07
【问题描述】:

我有一个带有 SessionListener 的示例 Spring MVC 应用程序:

public class SessionListener implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent e) {
        logger.info("Session created: " + e.getSession().getId());
    }

    public void sessionDestroyed(HttpSessionEvent e) {
        logger.info("Session destroyed: " + e.getSession().getId());
    }
}

还有一个自定义控制器:-

@Controller
public class SessionInvalidateController {
    @RequestMapping("/invalidateSession")
    void clearSession(HttpSession session) {
        session.invalidate();
    }
}

Log4j.xml 文件的转换模式是记录会话监听事件:-

当我从应用程序中点击 /invalidateSession URL 时。它成功地使会话无效,我得到了让我摸不着头脑的日志。

我得到的日志sn-p是:-

会话被破坏:4c3kpUbJt1zvCeOHWJkxpJY
已创建会话:4c3kpUbJt1zvCeOHWJkxpJY

我检查了从 HTTPSession 返回 id 的 HttpSessionEvent 代码。代码链接:http://grepcode.com/file/repo1.maven.org/maven2/javax.servlet/servlet-api/2.4/javax/servlet/http/HttpSession.java#HttpSession.getId%28%29

然后我在 Tomcat 7 上运行相同的代码,我得到了更改后的 ID。

Session destroyed: 4C7B0754969FE4EA98E351522C38E79F
Session created: 3BBA7D0968A49446D68E5505B9ECF124

虽然文档清楚地表明:

分配给此会话的唯一标识符

这里出现的问题是为什么这个 ID 没有改变?是我遗漏了什么还是这是预期的行为

【问题讨论】:

标签: java spring-mvc session


【解决方案1】:

请注意,如果有任何对会话的引用,它将不会失效,因此您将获得该值。这包括logger.info("Session destroyed: " + e.getSession().getId());

真正检查会话是否为空,在 session.invalidate() 之后;

HttpSession session= request.getSession(false);
if (session!= null && session.getAttribute("loginToken") != null){
   //do something
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多