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

时间:2019-03-22 06:15:51

标签: java http session tomcat servlets

我使用其他用户帐户登录,但是我具有包含创建的http会话ID的哈希图,并且我需要使用sessionid来使http会话无效。

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:0)

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

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

但是tomcat中没有JSP或其他东西可以做到这一点。

如果要使在该服务器上部署的应用程序中的会话无效,您可能会对How can i load Java HttpSession from JSESSIONID?

感兴趣

答案 1 :(得分:0)

有两种解决方案。 解决方案1: 在这里描述 How can i load Java HttpSession from JSESSIONID? 这里的问题是我们需要存储在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时,在标头中添加以下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'

答案 2 :(得分:-1)

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

session.invalidate();

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

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

session.invalidate();