有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用HttpServletRequest创建的JSESSIONID cookie的java设置路径。getSession(真)

我正在使用HttpServletRequest在web应用程序的一个servlet中创建会话。getSession(true),它还创建cookie JSSessionID。我想更改与此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) 个答案

  1. # 1 楼答案

    您已更改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);
    }
    

    有两个不同的cookie没有什么大问题。因此,如果您对两个cookie感到满意,可以使用第一个代码段