Вы изменили путь к файлу 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, установив его maxAge
на -1
, но не работал. Вот код, который я пробовал до сих пор:
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);
}
Нет серьезных проблем при наличии двух разных куки. Таким образом, вы можете использовать первый фрагмент кода, если вам удобно иметь два куки.
Спасибо, за ваш ответ. Я уже пробовал этот подход, но мне не хватало моей цели. Вместо того, что я делаю, как показано ниже \t \t \t если (httpResponse.containsHeader ("SET-COOKIE")) { \t \t \t \t Строка SessionID = httpRequest.getSession() GetId(). \t \t \t \t httpResponse.setHeader ("Set-Cookie", "JSESSIONID =" + SessionID \t \t \t \t \t \t + "; Путь = путь +";»); – maverick