Jak usunąć plik cookie z serwletu Java?
Próbowałem tego: http://www.jguru.com/faq/view.jsp?EID=42225
EDYCJA: Teraz działa pomyślnie, wydaje się, że jest to kombinacja:
response.setContentType("text/html");
i
cookie.setMaxAge(0);
Zanim to zrobiłem:
//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(-1);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);
Który wygasa plik cookie po zamknięciu przeglądarki zgodnie z dokumentacją .
Wartość ujemna oznacza, że plik cookie nie jest trwale przechowywany i zostanie usunięty po zamknięciu przeglądarki internetowej. Wartość zerowa powoduje usunięcie pliku cookie.
Pełny działający fragment kodu wygaśnięcia pliku cookie to:
//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(0);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);
W moim środowisku działa następujący kod. Chociaż na pierwszy rzut oka wygląda na zbędne
cookies[i].setValue("");
icookies[i].setPath("/");
są konieczne do prawidłowego wyczyszczenia pliku cookie.źródło
Pamiętaj, że plik cookie jest w rzeczywistości definiowany przez krotkę jego nazwy, ścieżki i domeny. Jeśli którykolwiek z tych trzech jest inny lub istnieje więcej niż jeden plik cookie o tej samej nazwie, ale zdefiniowany ze ścieżkami / domenami, które mogą być nadal widoczne dla danego adresu URL, nadal będziesz widzieć ten plik cookie przekazany w żądaniu. Np. Jeśli adres URL to „ http://foo.bar.com/baz/index.html ”, zobaczysz wszystkie pliki cookie zdefiniowane na bar.com lub foo.bar.com lub ze ścieżką „/” lub „/ baz”.
Tak więc wygląda na to, że powinno działać, o ile w kliencie zdefiniowano tylko jeden plik cookie o nazwie „SSO_COOKIE_NAME”, domenie „SSO_DOMAIN” i ścieżce „/”. Jeśli istnieją pliki cookie z inną ścieżką lub domeną, nadal będziesz widzieć plik cookie wysłany do klienta.
Aby to debugować, przejdź do preferencji przeglądarki Firefox -> karta Bezpieczeństwo i wyszukaj wszystkie pliki cookie za pomocą SSO_COOKIE_NAME. Kliknij każdą, aby zobaczyć domenę i ścieżkę. Założę się, że znajdziesz tam taki, którego nie spodziewasz się.
źródło
czy to nie zadziałało? Spowoduje to usunięcie wszystkich plików cookie, jeśli odpowiedź zostanie odesłana.
źródło
Jest to kod, którego skutecznie używałem wcześniej, przekazując
"/"
jako parametr strPath.źródło
Jeden szczególny przypadek: plik cookie nie ma ścieżki.
W takim przypadku ustaw ścieżkę jako
cookie.setPath(request.getRequestURI())
JavaScript ustawia plik cookie bez ścieżki, więc przeglądarka wyświetla go jako plik cookie tylko dla bieżącej strony. Jeśli spróbuję wysłać wygasły plik cookie za
path == /
pomocą przeglądarki, wyświetlają się dwa pliki cookie: jeden wygasł z,path == /
a drugi zpath == current page
.źródło