我正在使用HttpServletRequest.getSession(true)在我的Web应用程序的一个servlet中创建一个会话,该会话还会创建一个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");
}
}
}
答案 0 :(得分:0)
您已更改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,则可以使用第一个代码段。