Java Sunucu Uygulamasındaki Çerezleri nasıl kaldırırsınız?


135

Java sunucu uygulamasındaki bir çerezi nasıl kaldırırsınız?

Bunu denedim: http://www.jguru.com/faq/view.jsp?EID=42225

DÜZENLEME: Aşağıdaki başarılı bir şekilde çalışıyor gibi görünüyor:

response.setContentType("text/html");

ve

cookie.setMaxAge(0);

Ben yapmadan önce:

//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);

Tarayıcı belgelere göre kapatıldığında çerezin süresi dolar .

Negatif bir değer, çerezin kalıcı olarak saklanmadığı ve Web tarayıcısından çıkıldığında silineceği anlamına gelir. Sıfır değeri, çerezin silinmesine neden olur.

Bir çerezin süresinin dolması için tam çalışma snippet'i:

//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);

Yanıtlar:


138

MaxAge, -1 çerezin oturum süresince kalmasını istediğiniz sinyalleri verir. Bunun yerine MaxAge'ı 0 olarak ayarlamak istiyorsunuz.

Gönderen API belgelerine :

Negatif bir değer, çerezin kalıcı olarak saklanmadığı ve Web tarayıcısından çıkıldığında silineceği anlamına gelir. Sıfır değeri, çerezin silinmesine neden olur.

9
Başlangıçta firefox'ta setMaxAge (0) 'ı denedim ama yine de çerezlerimde "Geçerlilik süresi: oturumun sonunda" olarak listelendiğini gördüm ve sunucu uygulamamın hala süresi dolmuş çerezi aldığını düşündüm. Response.setContentType ("text / html") öğesini ayarlama ihtiyacı olan birleşik olabilir; ve setMaxAge (0); sonunda işe yaradı. Tekrar denedim ve setMaxAge (0) ile çerez sonraki Java istekleri benim istekleri gönderilmez görünmektedir.
Dougnukem

62

Benim çevremde, aşağıdaki kod çalışır. İlk bakışta gereksiz görünse de cookies[i].setValue("");ve cookies[i].setPath("/");çerezi düzgün bir şekilde temizlemek için gereklidir.

private void eraseCookie(HttpServletRequest req, HttpServletResponse resp) {
    Cookie[] cookies = req.getCookies();
    if (cookies != null)
        for (Cookie cookie : cookies) {
            cookie.setValue("");
            cookie.setPath("/");
            cookie.setMaxAge(0);
            resp.addCookie(cookie);
        }
}

1
Bu, tüm tarayıcılarda tutarlı bir şekilde çalışıyor gibi görünüyor.
ug_

5
Çerezin değerini veya yolunu ayarlamanız gerektiğinden emin değilim, çünkü bu farklı bir çerez olarak görülebilir, değil mi? Bir çerezi temizlemek için maksimum yaşı sadece 0 olarak ayarlamalısınız.
Gri

2
cookie.setPath (...), çerez oluşturulduğunda kullanılan yolla eşleşmelidir (çerez adı ve alan adı için aynıdır).
markus

12

Bir çerezin aslında adının, yolunun ve alan adının grubuyla tanımlandığını unutmayın. Bu üç taneden herhangi biri farklıysa veya aynı adda birden fazla çerez varsa ancak söz konusu URL için hâlâ görülebilen yollar / alan adlarıyla tanımlanmışsa, çerezin istek üzerine iletildiğini görürsünüz. Örneğin, URL " http://foo.bar.com/baz/index.html " ise, bar.com veya foo.bar.com adresinde veya "/" yolunda tanımlanan çerezleri görürsünüz. "/ baz".

Bu nedenle, istemcinizde "SSO_COOKIE_NAME" adı, "SSO_DOMAIN" alanı ve "/" yolu ile tanımlanmış tek bir çerez olduğu sürece, sahip olduğunuz şekilde çalışması gerekir. Farklı yol veya etki alanına sahip çerezler varsa, istemciye gönderilen çerezleri görmeye devam edersiniz.

Hata ayıklamak için Firefox'un tercihleri ​​-> Güvenlik sekmesine gidin ve SSO_COOKIE_NAME ile tüm çerezleri arayın. Etki alanını ve yolu görmek için her birini tıklayın. Bahse girerim orada beklediğiniz gibi olmayan bir tane bulacaksınız.


Ayrıca, adın veya yolun tarayıcıda baktığı çerezle (MaxAge değerini düzelttikten sonra) olmasa da, diğer çerezlerin varlığının veya yokluğunun durumu, varlığı veya yokluğu ile ilgisi yoktur. ayarladığı çerez.
cjs

8
Cookie[] cookies = request.getCookies();
if(cookies!=null)
for (int i = 0; i < cookies.length; i++) {
 cookies[i].setMaxAge(0);
}

işe yaramadı mı? Yanıt geri gönderilirse tüm çerezler kaldırılır.


15
Değiştirilen çerezi response.addCookie (cookies [i]) ile yanıta geri eklemeyi unutmayın;
Philihp Busby

7

Bu, "/"strPath parametresi olarak geçirerek daha önce etkili bir şekilde kullandığım kod .

public static Cookie eraseCookie(String strCookieName, String strPath) {
    Cookie cookie = new Cookie(strCookieName, "");
    cookie.setMaxAge(0);
    cookie.setPath(strPath);

    return cookie;
}

0

Özel bir durum: bir çerezin yolu yoktur.

Bu durumda yolu şu şekilde ayarlayın: cookie.setPath(request.getRequestURI())

Javascript çerezi yolsuz olarak ayarlar, böylece tarayıcı yalnızca geçerli sayfa için çerez olarak gösterir. Süresi dolmuş çerezi path == /tarayıcı ile göndermeye çalışırsam iki çerez gösterilir: biri sona erdi path == /diğeri ile path == current page.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.