2009-08-12 12 views
13

Czy istnieje sposób instruowania przeglądarki internetowej, aby całkowicie usunęła jeden plik cookie z PHP?Usunąć plik cookie z przeglądarki?

Nie chcę wygasać lub czekać, aż przeglądarka będzie zamknięta.

Z usunięciem mam na myśli to, że nie ma go już na liście plików cookie.

+0

Możesz "uprzejmie poprosić" przeglądarkę o usunięcie pliku cookie, ustawiając jego wartość na pusty ciąg lub ustawiając czas wygaśnięcia na pewną datę w przeszłości lub używając '$ cookie-> delete();' from https : //github.com/delight-im/PHP-Cookie – caw

Odpowiedz

9

Nie można zmusić przeglądarkę, aby usunąć plik powiązany z dowolnym pliku cookie, ponieważ nie można zagwarantować, że faktycznie taki plik - umowę pomiędzy przeglądarką a serwerem WWW dotyczących ciasteczek jest to, że dane będą prezentowane na kwalifikujących się wnioskach.

Podajesz, że "nie chcesz czekać na wygaśnięcie pliku cookie", ale wygaśnięcie plików cookie jest prawidłową metodą wskazującą, że dane nie są już potrzebne i nie powinny być prezentowane na przyszłych prośbach, które w większości sprawy tłumaczone są na przeglądarkę usuwającą plik.

Aby usunąć plik cookie, należy ustawić jego czas wygaśnięcia w przeszłości. W PHP jest to robione z setcookie().

+0

To było najbliższe odpowiedzi (akapit nr 1). Dzięki. –

5

Tak. Użyj setcookie() i ustaw datę ważności pliku cookie, który chcesz usunąć, do czasu w przeszłości. Przeglądarka użytkownika powinna automatycznie ją usunąć.

-1

Napisałem tę wtyczkę dla mnie i działa poprawnie.

(function($) { 
    $.cookieAllDelete = function(doc) 
    { 
     var cookie_date = new Date(); 
     var cookies = null; 

     cookies = doc.cookie.split(';'); 
     cookie_date.setTime(cookie_date.getTime() - 1); 

     for(var i=0; i < cookies.length; i++) 
     { 
      var cookie_name = cookies[i].split('=')[0]; 
      try { 
       if (cookie_name.length > 0) 
        doc.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString(); 
      } catch(ex) {} 
     } 
    } 
})(jQuery); 

jQuery.cookieAllDelete(document); 
+3

Jak dobrze to działa, jeśli mam wyłączoną obsługę JavaScript? :-) – ceejayoz

+0

Przepraszamy, szukałem również tagów jQuery i jestem zdezorientowany. dzięki za upadek –

+1

Down nie był ode mnie. – ceejayoz

19

Spróbuj coś takiego, aby usunąć wszystkie pliki cookie:

foreach ($_COOKIE as $name => $value) { 
    setcookie($name, '', 1); 
} 

Wartość 1 jest wygasają wartość i stanowi jedną sekundę po rozpocząć od czasu epoki Uniksa. Więc zawsze już minął.

+0

Ktoś posłał i zaaprobował wszystkie odpowiedzi związane z wygasaniem, ponieważ pytanie mówiło, że nie chcą go stracić. –

+17

@ Chacha102: Cóż, to znaczy, że ktoś nie wie jak działają pliki cookie. – Gumbo

+0

@Gumbo Możesz improwizować i owijać swoją odpowiedź w funkcję o nazwie "deleteAllCookies", aby sfałszować ją dla tej osoby. : P – choz

1

Myślę, że trzeba użyć połączonej podejście:

  • zestaw wygaśnięcia w drodze powrotnej w przeszłości (jak sugeruje Chacha102)
  • korzystanie JavaScriptto usunąć wpisy z obiektu document.cookie DOM (jak sugeruje Andres Descalzo)

są 2 powody, dla zamiar z podejścia mieszanego:

  • JavaScript można wyłączyć w przeglądarce
  • nie wszystkie pliki cookie są widoczne w pliku document.cookie Niektóre nowoczesne przeglądarki obsługują znaczniki httponly w celu zapisania plików cookie. PHP posiada wsparcie dla HttpOnly plików cookie, zobacz http://www.php.net/setcookie
3

"Wygląda na to, że usunięcie pliku cookie jest trudniejsze niż się wydaje.

setcookie($name, '', 1); 

Nie poradzę sobie. '' jest pusty i setcookie może zignorować całą instrukcję.

także ustawienie czasu do przeszłości czasami pozwala cookie, aby zachować wartość, której upływa czas jest nowsza niż 1.

mam do czynienia z tym teraz. Nie wiem skąd to się bierze, ale jest tam.

Mam uciekają się do

setcookie($name, '0', 9000000000); 

Gwarantuje cookie jest ustawiony na wartość, która postanawia fałszywe i że jest nowszy niż poprzedniej wartości.

Jeśli ktokolwiek ma wgląd w to zachowanie, proszę powiedzieć.

Podejrzewam, że trudność polega na tym, że domeny i wartości ścieżek dla setcookie mają być takie same od wykonania do wykonania, gdy wartości nie są określone.

Wiem, że taki plik cookie nie wygasa do 2038 roku.

Alternatywnie, jeśli znana jest najnowsza data ważności pliku cookie, należy ją ustawić tylko po 1 sekundzie.

+0

W moim przypadku powodem, dla którego setcookie nie działał, jest to, że nie użyłem tej samej lokalizacji dla czwartego parametru. Dlatego upewnij się, że używasz tej samej lokalizacji dla czwartego parametru, aby usunąć ciasteczko z powodzeniem – Antony

+1

Ustaliłem, że musisz ustawić te same parametry dla ustawienia i usunięcia pliku cookie. Ustaw Cookie: setcookie ($ name, $ uid ', $ time,'/',' ', 0); - Usuń plik cookie: setcookie ($ name, $ uid ', 1,'/',' .domain.name ', 0); nie zadziała, piąty parametr musi być taki sam dla obu. – Grant

+0

Wydrukuj tablicę $ _COOKIE, anuluj klucz pertikularny: unset ($ _ COOKIE [$ name]); – ShivarajRH

Powiązane problemy