Usunąć plik cookie według nazwy?

151

Jak mogę usunąć określony plik cookie o tej nazwie roundcube_sessauth?

Nie powinien:

function del_cookie(name) {
    document.cookie = 'roundcube_sessauth' + 
    '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
} 

I wtedy:

<a href="javascript:del_cookie(name);">KILL</a>

Zabić roundcube_sessauthciastko?

Charlie
źródło
1
name? Jaki to ma sens? A może jest to kac po bardziej wszechstronnej wersji, która pozwala określić nazwę pliku cookie?
paxdiablo
Nie myśl, że to oszustwo. W szczególności prosi o wyczyszczenie wszystkich plików cookie.
paxdiablo
1
Nie chcę usuwać wszystkich plików cookie ... Tylko jeden. Znalazłem podstawowy kod z googlowania. I oczywiście spróbowałem. @Paxdiablo Przyjąłem to do nazwania pliku cookie, ale mogę się całkowicie mylić.
Charlie
@paxdiablo - ...How can I delete a specific cookie
Derek 朕 會 功夫
1
@Derek i in., Wydajesz się źle rozumieć. Twierdziłem, że proponowany duplikat Gabe'a wcale nie był oszustem, ponieważ proponowany duplikat pytał o usunięcie wszystkich plików cookie, a to pytanie dotyczy usunięcia określonego pliku cookie. Ja nie narzeka na to pytanie w jakikolwiek sposób, kształt lub formę :-)
paxdiablo

Odpowiedzi:

252

Należy zdefiniować ścieżkę, na której znajduje się plik cookie, aby upewnić się, że usuwasz właściwy plik cookie.

function set_cookie(name, value) {
  document.cookie = name +'='+ value +'; Path=/;';
}
function delete_cookie(name) {
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

Jeśli nie określisz ścieżki, przeglądarka ustawi plik cookie w odniesieniu do strony, na której aktualnie się znajdujesz, więc jeśli usuniesz plik cookie na innej stronie, drugi plik cookie będzie nadal istniał.

Edytuj na podstawie komentarza @Evan Morrison.
Należy pamiętać, że w niektórych przypadkach do zidentyfikowania prawidłowego pliku cookie Domainwymagany jest parametr.
Zwykle jest definiowany jako Domain=.yourdomain.com.
Umieszczenie kropki przed nazwą domeny oznacza, że ​​ten plik cookie może istnieć w dowolnej subdomenie ( wwwliczy się również jako subdomena).

Ponadto, jak wspomniano w odpowiedzi @ RobertT, HttpOnlyplików cookie nie można usunąć za pomocą JavaScript po stronie klienta.

emii
źródło
23
To doprowadzało mnie do szału! Po dodaniu Path = / mogłem usunąć. Dzięki!
duyn9uyen
12
To powinna być prawidłowa odpowiedź, bez niej Pathw większości przypadków nie działa .
SuperMarco
9
Nie mogłem usunąć pliku cookie, dopóki nie dodałem zarówno ścieżki, jak i poprawnej wartości „Domain =”; '... Moje oświadczenie brzmiało: document.cookie = "cookieName =; path = /; expires = Thu, 01 stycznia 1970 00:00:01 GMT; domain = .myDomain.com"
Evan Morrison
1
To rozwiązanie nadal działa, ale można je napisać nieco bardziej zwięźle Max-Age=0, jeśli zależy ci na takich rzeczach.
MaxPRafferty
181

Aby usunąć plik cookie, ustaw expiresdatę na przeszłą. Funkcją, która to robi, byłaby.

var delete_cookie = function(name) {
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
};

Następnie, aby usunąć plik cookie o nazwie roundcube_sessauthpo prostu zrób.

delete_cookie('roundcube_sessauth');
paxdiablo
źródło
1
Wydaje mi się, że to powinno działać (wygląda na to, że powinno działać: D!), Ale przeglądam pliki cookie ustawione przez moją stronę w przeglądarce Firefox i kiedy klikam przycisk „KILL”, plik cookie nie jest usuwany. Masz jakiś pomysł, dlaczego?
Charlie
Działa to w Google Chrome. Zainstaluj firebuga i zobacz, czy są jakieś błędy.
1
Bez błędów, myślę, że to po prostu nie jest usunięcie pliku cookie w Roundcube. Prawdopodobnie dobrze usuwa inne pliki cookie.
Charlie
39
Użytkownicy poszukujący odpowiedzi na to pytanie powinni zapoznać się z odpowiedzią poniżej. path=/Klucz jest ważny dla zgodności przeglądarki.
bencripps
2
Ta odpowiedź nie działa dla mnie w Chrome, nie próbowałem jej w Firefoksie. Ale odpowiedź emii poniżej zadziałała.
Daniel F
11

// jeśli przeszedł exMins = 0, zostanie usunięty zaraz po utworzeniu.

function setCookie(cname, cvalue, exMins) {
    var d = new Date();
    d.setTime(d.getTime() + (exMins*60*1000));
    var expires = "expires="+d.toUTCString();  
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

setCookie('cookieNameToDelete','',0) // this will delete the cookie.
Kishor Patil
źródło
exMins jest niezdefiniowane w tym przykładzie, prawdopodobnie miałeś na myśli exdays
bhurlow
Tak ... zamiast tego zmień nazwę argumentu exdays na exMins .. dzięki #BhBh
Kishor Patil
7

Nie jestem pewien, czy tak było z wersją Roundcube z maja 2012 roku, ale w przypadku obecnej odpowiedź brzmi, że nie można usunąć roundcube_sessauthcookie z JavaScript, ponieważ jest on oznaczony jako HttpOnly. A to oznacza, że ​​nie jest dostępny z kodu po stronie klienta JS i można go usunąć tylko za pomocą skryptu po stronie serwera lub przez bezpośrednie działanie użytkownika (za pośrednictwem niektórych mechanizmów przeglądarki, takich jak zintegrowany debugger lub niektóre wtyczki).

Robert T.
źródło
1

Możesz wypróbować to rozwiązanie

var d = new Date();
d.setTime(d.getTime());
var expires = "expires="+d.toUTCString();
document.cookie = 'COOKIE_NAME' + "=" + "" + ";domain=domain.com;path=/;expires=" + expires;
Nafees
źródło
0

W moim przypadku użyłem kodu Blow dla innego środowiska.

  document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.${document.domain.split('.').splice(1).join('.')}`;
Amir Movahedi
źródło