gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:21:37 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com