Wie entferne ich ein Cookie in einem Java-Servlet?
Ich habe Folgendes versucht: http://www.jguru.com/faq/view.jsp?EID=42225
BEARBEITEN: Das Folgende funktioniert jetzt erfolgreich. Es scheint die Kombination von zu sein:
response.setContentType("text/html");
und
cookie.setMaxAge(0);
Bevor ich tat:
//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);
Das Cookie läuft ab, wenn der Browser gemäß der Dokumentation geschlossen wird .
Ein negativer Wert bedeutet, dass das Cookie nicht dauerhaft gespeichert wird und beim Beenden des Webbrowsers gelöscht wird. Ein Wert von Null bewirkt, dass das Cookie gelöscht wird.
Das voll funktionsfähige Snippet zum Ablaufen eines Cookies lautet:
//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);
In meiner Umgebung funktioniert der folgende Code. Sieht zwar auf den ersten Blick überflüssig aus
cookies[i].setValue("");
undcookies[i].setPath("/");
ist notwendig, um den Cookie richtig zu löschen.quelle
Beachten Sie, dass ein Cookie tatsächlich durch das Tupel aus Name, Pfad und Domäne definiert wird. Wenn eines dieser drei Cookies unterschiedlich ist oder mehr als ein Cookie mit demselben Namen vorhanden ist, das jedoch mit Pfaden / Domänen definiert ist, die für die betreffende URL möglicherweise noch sichtbar sind, wird das Cookie weiterhin an die Anforderung übergeben. Wenn die URL beispielsweise " http://foo.bar.com/baz/index.html " lautet, werden auf bar.com oder foo.bar.com oder mit dem Pfad "/" oder "Cookies definiert "/ baz".
So wie es aussieht, sollte es funktionieren, solange im Client nur ein Cookie mit dem Namen "SSO_COOKIE_NAME", der Domäne "SSO_DOMAIN" und dem Pfad "/" definiert ist. Wenn Cookies mit einem anderen Pfad oder einer anderen Domain vorhanden sind, wird das an den Client gesendete Cookie weiterhin angezeigt.
Um dies zu debuggen, gehen Sie in die Einstellungen von Firefox -> Registerkarte Sicherheit und suchen Sie mit SSO_COOKIE_NAME nach allen Cookies. Klicken Sie auf die einzelnen Domänen, um die Domäne und den Pfad anzuzeigen. Ich wette, Sie werden dort einen finden, der nicht ganz Ihren Erwartungen entspricht.
quelle
hat das nicht geklappt Dadurch werden alle Cookies entfernt, wenn die Antwort zurückgesendet wird.
quelle
Dies ist Code, den ich zuvor effektiv verwendet habe und der
"/"
als strPath-Parameter übergeben wurde.quelle
Ein Sonderfall: Ein Cookie hat keinen Pfad.
In diesem Fall setzen Sie den Pfad auf
cookie.setPath(request.getRequestURI())
Das Javascript setzt Cookies ohne Pfad, sodass der Browser sie nur als Cookie für die aktuelle Seite anzeigt. Wenn ich versuche, das abgelaufene Cookie mit
path == /
dem Browser zu senden , werden zwei Cookies angezeigt: eines mitpath == /
und eines mitpath == current page
.quelle