Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置使用HttpServletRequest.getSession创建的JSSessionID cookie的路径(true)_Java_Jakarta Ee_Tomcat6 - Fatal编程技术网

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

Java 设置使用HttpServletRequest.getSession创建的JSSessionID cookie的路径(true),java,jakarta-ee,tomcat6,Java,Jakarta Ee,Tomcat6,我正在使用HttpServletRequest.getSession(true)在我的web应用程序的一个servlet中创建会话,它还创建了一个CookieJSessionID。我想更改与此cookie关联的路径。我试图通过setPath方法来实现这一点,但它不起作用。我正在使用tomcat6。提前谢谢。下面是我正在使用的代码 HttpSession session = httpRequest.getSession(true); Cookie[] cookies = httpRequest.g

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

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

您已更改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感到满意,可以使用第一个代码段。

谢谢您的回复。我已经尝试过上述方法,但它不足以达到我的目的。相反,我所做的是如下所示(httpResponse.containsHeader(“SET-COOKIE”){String sessionid=httpRequest.getSession().getId();httpResponse.setHeader(“SET-COOKIE”,“jssessionid=“+sessionid+”;Path=Path+”;);谢谢你的回复。我已经尝试了上述方法,但它不足以满足我的目的。相反,我所做的是如下所示(httpResponse.containsHeader(“SET-COOKIE”){String sessionid=httpRequest.getSession().getId();httpResponse.setHeader(“SET-COOKIE”,“JSSessionId=“+sessionid+”;“Path=Path+”;);