生成新的会话ID

时间:2018-02-21 06:23:27

标签: servlets session-fixation

如何使用out扩展HttpServlet类来生成新的会话ID。是否必须扩展HttpServlet类&是否必须使用doGet方法

来创建新的会话ID
public class LoginSupport extends ActionSupport {

    public void prepare() {
        HttpSession session = ServletActionContext.getRequest().getSession();
        session.invalidate();
        //How to genarate new session id
    }
}

2 个答案:

答案 0 :(得分:3)

调用HttpSession#invalidate()后,您可以通过调用HttpServletRequest#getSession()来创建新会话。

例如

public void prepare() {
    final HttpServletRequest request = ServletActionContext.getRequest();
    request.getSession().invalidate();

    // generate new session (and id)
    final HttpSession newSession = request.getSession();
}

服务器的下一个HTTP响应应包含新的会话ID,例如

Set-Cookie: JSESSIONID=6a303082951311647336934;path=/

来自https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletRequest.html#getSession--

  

getSession

     

HttpSession getSession()

     

返回与此请求关联的当前会话,或者如果请求没有会话,则创建一个

答案 1 :(得分:1)

在Servlet 3.1或更新版本(Java EE 7)上时,只需使用HttpServletRequest#changeSessionId()

request.changeSessionId();

它不会使会话无效,只是更改JSESSIONID Cookie的值。