我正在使用 HttpServletRequest.getSession(true) 在我的 Web 应用程序的 servlet 之一中创建一个 session ,该 session 还创建一个 cookie JSESSIONID。我想更改与此 cookie 关联的路径。我试图通过 setPath 方法来做到这一点,但它不起作用。我用的是tomcat6。提前致谢。下面是我正在使用的代码
HttpSession session = httpRequest.getSession(true);
Cookie[] cookies = httpRequest.getCookies();
if(cookies != null) {
for (Cookie c : cookies)
{
if(c.getName().equals("JSESSIONID"))
{
c.setPath("somepath");
}
}
}
最佳答案
您已更改 cookie 路径,但未将修改后的 cookie 附加到响应中。因此,在客户端,更改永远不会被识别。
修改后将修改后的 cookie 添加到响应中,如下 httpResponse.addCookie(c)
。
试试这个代码:
HttpSession session = httpRequest.getSession(true);
Cookie[] cookies = httpRequest.getCookies();
if(cookies != null) {
for (Cookie c : cookies)
{
if(c.getName().equals("JSESSIONID"))
{
c.setPath("somepath");
httpResponse.addCookie(c);
}
}
}
但是,它不会删除具有旧路径的现有 cookie,而是会创建一个具有新路径的新 cookie。
不幸的是,我无法找到删除现有 cookie 的方法。我尝试通过将 maxAge
设置为 -1
来删除旧的 cookie,但没有成功。这是我迄今为止尝试过的代码:
String jSessionId = null;
HttpSession session = request.getSession(false);
if(session == null) {
session = request.getSession(true);
}
Cookie[] cookies = request.getCookies();
if(cookies != null) {
for (Cookie c : cookies)
{
if(c.getName().equals("JSESSIONID"))
{
jSessionId = c.getValue();
c.setValue(null);
c.setMaxAge(0);
response.addCookie(c);
}
}
}
if(jSessionId != null) {
Cookie c = new Cookie("JSESSIONID", jSessionId);
c.setPath("/servlet/sayhello");
c.setHttpOnly(true);
response.addCookie(c);
}
拥有 2 个不同的 cookie 不会产生重大问题。因此,如果您愿意使用两个 cookie,则可以使用第一个代码片段。
关于java - 设置使用 HttpServletRequest.getSession(true) 创建的 JSESSIONID cookie 的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33006358/