Bagaimana Anda menghapus cookie di servlet Java?
Saya mencoba ini: http://www.jguru.com/faq/view.jsp?EID=42225
EDIT: Yang berikut ini sekarang berfungsi dengan baik tampaknya merupakan kombinasi dari:
response.setContentType("text/html");
dan
cookie.setMaxAge(0);
Sebelum saya melakukan:
//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);
Cookie mana yang kedaluwarsa ketika browser ditutup sesuai dengan dokumentasi .
Nilai negatif berarti cookie tidak disimpan terus-menerus dan akan dihapus ketika browser Web keluar. Nilai nol menyebabkan cookie dihapus.
Cuplikan yang berfungsi penuh untuk kedaluwarsa cookie adalah:
//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);
Di lingkungan saya, kode berikut berfungsi. Meskipun terlihat berlebihan pada pandangan pertama,
cookies[i].setValue("");
dancookies[i].setPath("/");
perlu untuk menghapus cookie dengan benar.sumber
Perlu diingat bahwa cookie sebenarnya ditentukan oleh tuple dari nama, jalur, dan domainnya. Jika salah satu dari ketiganya berbeda, atau ada lebih dari satu cookie dengan nama yang sama, tetapi didefinisikan dengan jalur / domain yang mungkin masih terlihat untuk URL yang dipermasalahkan, Anda masih akan melihat cookie itu melewati permintaan. Misalnya, jika urlnya adalah " http://foo.bar.com/baz/index.html ", Anda akan melihat cookie apa pun yang didefinisikan di bar.com atau foo.bar.com, atau dengan lintasan "/" atau "/ baz".
Dengan demikian, apa yang Anda miliki tampaknya berfungsi, asalkan hanya ada satu cookie yang ditentukan dalam klien, dengan nama "SSO_COOKIE_NAME", domain "SSO_DOMAIN", dan path "/". Jika ada cookie dengan jalur atau domain berbeda, Anda masih akan melihat cookie yang dikirim ke klien.
Untuk men-debug ini, buka preferensi Firefox -> tab Keamanan, dan cari semua cookie dengan SSO_COOKIE_NAME. Klik masing-masing untuk melihat domain dan jalur. Saya yakin Anda akan menemukan satu di sana yang tidak sesuai harapan Anda.
sumber
apakah itu tidak berhasil? Ini menghapus semua cookie jika respons dikirim kembali.
sumber
Ini adalah kode yang telah saya gunakan secara efektif sebelumnya, lulus
"/"
sebagai parameter strPath.sumber
Satu kasus khusus: cookie tidak memiliki jalur.
Dalam hal ini tetapkan path sebagai
cookie.setPath(request.getRequestURI())
Javascript menetapkan cookie tanpa path sehingga browser menunjukkannya sebagai cookie untuk halaman saat ini saja. Jika saya mencoba mengirim cookie yang kadaluwarsa dengan
path == /
browser menunjukkan dua cookie: yang satu kadaluwarsa dengan yangpath == /
lain denganpath == current page
.sumber