2

如何在不扩展 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
    }
}
4

2 回答 2

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--

获取会话

HttpSession getSession()

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

于 2018-02-21T06:33:46.423 回答
3

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

request.changeSessionId();

它不会使会话无效,而只是更改JSESSIONIDcookie 的值。

于 2018-02-22T10:32:47.293 回答