2015-10-08 3 views
0

Я создаю сеанс в одном из сервлетов моего веб-приложения, используя HttpServletRequest.getSession (true), который также создает JSESSIONID для файлов cookie. Я хочу изменить путь, связанный с этим файлом cookie. Я пытаюсь сделать это методом setPath, но не работает. Я использую tomcat6. Заранее спасибо. Ниже приведен код, который я используюустановить путь к файлу JSESSIONID, созданному с помощью HttpServletRequest.getSession (true)

HttpSession session = httpRequest.getSession(true); 
Cookie[] cookies = httpRequest.getCookies(); 
if(cookies != null) { 
    for (Cookie c : cookies) 
    { 
     if(c.getName().equals("JSESSIONID")) 
     { 
      c.setPath("somepath"); 
     } 
    } 
} 

ответ

0

Вы изменили путь к файлу 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); 
} 

Нет серьезных проблем при наличии двух разных куки. Таким образом, вы можете использовать первый фрагмент кода, если вам удобно иметь два куки.

+0

Спасибо, за ваш ответ. Я уже пробовал этот подход, но мне не хватало моей цели. Вместо того, что я делаю, как показано ниже \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