设置使用HttpServletRequest.getSession创建的JSESSIONID cookie的路径(true)

时间:2015-10-08 03:59:52

标签: java java-ee tomcat6

我正在使用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");
        }
    }
}

1 个答案:

答案 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,则可以使用第一个代码段。