Servlets 生成新的会话Id
如何使用out extends HttpServlet类生成新会话id。是否必须扩展HttpServlet类&是否必须使用in-doGet方法生成新会话idServlets 生成新的会话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
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();