Servlets 生成新的会话Id

Servlets 生成新的会话Id,servlets,session-fixation,Servlets,Session Fixation,如何使用out extends HttpServlet类生成新会话id。是否必须扩展HttpServlet类&是否必须使用in-doGet方法生成新会话id public class LoginSupport extends ActionSupport { public void prepare() { HttpSession session = ServletActionContext.getRequest().getSession(); sessio

如何使用out extends HttpServlet类生成新会话id。是否必须扩展HttpServlet类&是否必须使用in-doGet方法生成新会话id

public class LoginSupport extends ActionSupport {

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

调用
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=/

getSession

HttpSession getSession()

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


在Servlet3.1或更新版本(JavaEE7)上,只需使用


它不会使会话无效,只需更改
JSESSIONID
cookie的值。

HttpServletRequest的另一个调用#getSession()
应重新创建会话并生成新的IDIt,但它不起作用,你能告诉我我应该在prepare方法中放什么吗?我在回答中确实有。我用in prepare方法将你的代码放在我的代码之后,但它不起作用&为什么我们要两次销毁一个会话Id?可能与我很久以前的这个问题有关~。在我的研究中,我发现JBoss展示了这一点behaviour@Mapa也许可以为这个问题提出另一个问题。我从未使用过JBoss
request.changeSessionId();