繁体   English   中英

如何使用会话 ID 使 http 会话无效

[英]How can I Invalidate a http session by using session id

我使用不同的用户帐户登录,但我有一个带有创建的 http 会话 ID 的哈希图,我需要使用sessionid使 http 会话无效。

有没有办法做到这一点?

没有标准方法可以仅知道会话 ID 来删除会话。

也许您可以通过发送假会话 ID(作为 cookie 或 http 参数)来欺骗服务器以接管另一个会话并尝试使用应用程序的某些方法(例如“注销”)使其无效。

但是tomcat里面没有JSP什么的,可以做到这一点。

如果您想让部署在该服务器上的应用程序中的会话无效,您可能对如何从 JSESSIONID 加载 Java HttpSession感兴趣

对此有几种解决方案。 解决方案 1:此处描述如何从 JSESSIONID 加载 Java HttpSession? 这里的问题是我们需要存储在 Map 中创建的所有会话。 这里存在安全隐患。

解决方案 2:实现类似这样的注销 API。

    @RequestMapping(value = "/logout", method = RequestMethod.GET)
public ResponseEntity<Resource> logout(HttpServletRequest request, HttpServletResponse response) {
    HttpSession session = request.getSession(false);
    LOG.info("Clean session: sessionId: [{}]", session == null ? "null" : session.getId());
    if (session != null) {
        session.invalidate();
    }

    return new ResponseEntity<>(new Resource<String>(), HttpStatus.OK);
}

调用此 API 时,在 header 中添加以下 cookie,假设您的会话是 49A77C2ED71E3240FC2CC5DBD20C7CCE 那么请求将是这样的

curl --location --request PUT 'https://your.server.com/<somepath>/logout' \\ --header 'Authorization: Some authToken if required' \\ --header 'cookie: JSESSIONID=49A77C2ED71E3240FC2CC5DBD20C7CCE; Path=/<somepath>; Secure; HttpOnly'

您可以在给定的方法下使用

session.invalidate();

或者您可以从会话中删除所有属性并使其无效

Enumeration<String> attributes = request.getSession().getAttributeNames();
while (attributes.hasMoreElements()) {
    String attribute = attributes.nextElement();
    session.removeAttribute(attribute);
}

session.invalidate();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM