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

标签 java jakarta-ee tomcat6

我正在使用 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/

相关文章:

java - Java 中的标签库 : tag with array parameter

java - 从开发到生产集成 Java Web 应用程序

eclipse - 如何从外部访问 Eclipse Tomcat 服务器?

java - Grails + Tomcat + Ubuntu 问题: CLOSE_WAIT connections

java - 内存不足错误 : Java heap space error when start solr

java - 列索引无效

java - 矩形不会在 JFrame 中显示

java - 鉴别器公式

java - 服务委托(delegate)抛出 "LazyInitializationException: could not initialize proxy - no Session"

java - Eclipse 中缺少动态 Web 项目选项