Java 设置使用HttpServletRequest.getSession创建的JSSessionID cookie的路径(true)
我正在使用HttpServletRequest.getSession(true)在我的web应用程序的一个servlet中创建会话,它还创建了一个CookieJSessionID。我想更改与此cookie关联的路径。我试图通过setPath方法来实现这一点,但它不起作用。我正在使用tomcat6。提前谢谢。下面是我正在使用的代码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
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+”;);