Chrome nie usuwa plików cookie sesji

188

Próbuję ustawić plik cookie sesji w javascript w następujący sposób:

document.cookie = 'name=alex; path=/'

Ale Chrome nie usuwa go, nawet jeśli zamknę przeglądarkę i uruchomię ją ponownie.

Sprawdziłem w Firefox i Opera i oba działają zgodnie z przeznaczeniem - usuwają sesyjne pliki cookie przy zamykaniu przeglądarki.

Czy Chrome po prostu ignoruje reguły wygasania?

Sprawdziłem w wielu systemach operacyjnych i dowiedziałem się, że sesyjny plik cookie jest usuwany w Chrome w Windows XP i Ubuntu, ale NIE w Mac OSX Lion.

mgs
źródło
1
Było dokładnie tak, jak w moim poście, tj. Bez daty ważności, nie jestem pewien co do Httponly. Nie próbuję go usunąć ręcznie. Problem polega na tym, że przeglądarki powinny je usunąć przy wyjściu, ale Chrome po prostu tego nie robi.
mgs
>>> i dowiedziałem się, że sesyjny plik cookie jest usuwany w Chrome w systemie Windows XP. Nie. W systemie Windows XP Chrome też nie usuwa plików cookie. Używam teraz systemu Windows XP i znalazłem twoje pytanie, ponieważ mam ten sam problem. Jedyna różnica polega na tym, że korzystam z ZF2 i ustawiam opcje sesji za pośrednictwem pakietu sesji. Ale i tak jest to zwykle sposób php - ini_set("session.cookie_lifetime", 0)i 'remember_me_seconds' => 1. Ale to nie pomaga. Firefox działa dobrze, ale Chrome nie.
Zielony

Odpowiedzi:

222

Może to być spowodowane ustawieniem Chrome na Kontynuuj od momentu przerwania .

wprowadź opis zdjęcia tutaj

Dalsza lektura

Jesper
źródło
3
Próbowałem ładnie sformatować swój komentarz przy łamaniu linii, ale głupi system również usunął te łamania linii ... No dalej, Stackoverflow, stwórz lepszy system! Spędzam czas, aby moje komentarze były czytelne, aby były bardzo pomocne dla czytelników, a następnie zrujnowałeś je najpierw, niemądrze wierząc, że jestem spamerem, a następnie usuwając łamanie linii!
Jesper
2
Uwaga: dokładnie ten sam problem można spotkać w przeglądarce Firefox, jeśli w opcjach rozwijanych opcji „Kiedy Firefox uruchamia się” jest zaznaczona opcja „Pokaż moje okna i karty od czasu ostatniego”. Z tego samego powodu. Z założenia przechowywane są sesyjne pliki cookie, które pomagają utrzymać przepływ pracy w przypadku awarii przeglądarki.
webnesto
40
Tak. Z tego powodu zarówno Chrome, jak i FF psują funkcjonalność plików cookie sesji. W przypadku Chrome problem został zgłoszony: code.google.com/p/chromium/issues/detail?id=128513 i oznaczony jako WONTFIX. Oczywiście Google nie podaje *** w kwestii przestrzegania standardów internetowych i luk bezpieczeństwa w Chrome, podobnie jak FF. Zobacz błąd FF (przynajmniej nie zamknięty): bugzilla.mozilla.org/show_bug.cgi?id=443354 Co za smutny stan dla tych dwóch przeglądarek.
lucian303
4
w3.org/Protocols/rfc2109/rfc2109 : Max-Age Domyślnym zachowaniem jest odrzucanie pliku cookie po zamknięciu programu użytkownika.
lucian303
2
@ lucian303, chociaż wygląda to na naruszenie standardów, nie sądzę, że można „kontynuować przeglądanie od ostatniego razu” bez „utrzymywania pliku cookie sesji”. Opera, rekonq i IE9 (na przykład poprzez link „Otwórz ponownie ostatnią sesję” na stronie Nowa karta), na przykład, zaimplementuj pierwszą bez drugiej. W rezultacie takie przeglądarki mogą wyświetlać strony w pamięci podręcznej, które błędnie wskazują, że nadal jesteś zalogowany i / lub masz zablokowany token ochrony CSRF.
sayap
25

Właśnie miałem ten sam problem z plikiem cookie, który wygasł po „zakończeniu sesji przeglądania”.

Niestety tak się nie stało, więc grałem trochę z ustawieniami przeglądarki.

Okazało się, że przyczyną problemu była funkcja zapamiętywania otwartych kart po zamknięciu przeglądarki. (Funkcja nosi nazwę „Przy uruchomieniu” - „Kontynuuj tam, gdzie ją przerwałam”. Przynajmniej w bieżącej wersji Chrome).

Dzieje się tak również w przypadku Opera i Firefox.

Nikola Kolev
źródło
To od razu rozwiązało problem! Miło wiedzieć, dlaczego tak się dzieje :)
szybki refleks
5
Gorszący. Nie chcę, aby Chrome zapomniał, które okna były otwarte, ponieważ zbyt często przypadkowo wychodzę z Chrome z otwartymi wieloma kartami. (Dzięki OS X za umożliwienie mi przewijania okna, które nie ma fokusu, co prowadzi mnie do przekonania, że ​​NIE ma fokusa. Ale inna historia). Jeśli muszę się ponownie zalogować, niech tak będzie. Nie wylogowanie mnie, gdy celowo wychodzę, utrudnia upewnienie się, że nie jestem jeszcze nigdzie zalogowany, co może być DUŻĄ kwestią bezpieczeństwa.
Michael
5
Przynajmniej ta opcja nie jest domyślnie włączona. Ta „funkcja” jest również wspomniana w Pomocy Google : „Chrome przywróci również dane przeglądania i sesyjne pliki cookie ”. IMO powinna to być dodatkowa podwariancja w „Kontynuuj tam, gdzie skończyłem”.
MrWhite
Nawiasem mówiąc, nie wydaje się to już „problemem” w przypadku Opery (testowana Opera 22, chociaż nie zauważyłem, że jest to problem co najmniej dla jednej lub dwóch wersji). Firefox 29 przywraca pliki cookie sesji, gdy zaznaczone jest odpowiednie „Pokaż moje okna i karty od czasu ostatniego” (zgodnie z dokumentacją).
MrWhite
2
@Michael Co nie ma większego sensu, ponieważ większość stron internetowych korzystających z sesji nie pozwoli ci wrócić na stronę, na której byłeś po wylogowaniu. Czy chcesz, aby przeglądarka kontynuowała pracę w miejscu, w którym ją przerwałeś?
Deji
21

Właśnie miałem ten problem. Zauważyłem, że nawet po zamknięciu przeglądarki uruchomiłem wiele procesów Chrome. Okazuje się, że każdy z nich był z mojego rozszerzenia Chrome.

W ustawieniach zaawansowanych odznaczyłem, 'Continue running background apps when Google Chrome is closed'a moje sesyjne pliki cookie zaczęły działać tak, jak powinny.

Nadal odczuwamy ból z tyłu dla wszystkich programistów, którzy pisali kod, oczekując, że sesyjne pliki cookie zostaną usunięte, gdy użytkownik skończy przeglądanie.

NSjonas
źródło
Zwykle „aplikacje działające w tle” nie mają nic wspólnego z trwałością plików cookie sesji (chyba że masz rozszerzenie, które zapamiętuje pliki cookie sesji ?!). Opcja „Kontynuuj, gdzie skończyłem” w ustawieniach przywraca również pliki cookie sesji (jak wspomniano w innej odpowiedzi).
MrWhite
1
Działa, po wyłączeniu tej opcji usuwam pliki cookie sesji!
Walid Ammar
Jest to rzeczywiście kolejny powód, dla którego sesyjne pliki cookie nie są usuwane. Dzięki.
L-Four
10

Może to dlatego, że po zamknięciu przeglądarki Chrome nadal działa w tle. Spróbuj wyłączyć tę funkcję, wykonując następujące czynności:

  1. Otwórz chrome: // settings /
  2. Kliknij „Pokaż ustawienia zaawansowane ...”
  3. Przejdź do sekcji System i wyłącz „Kontynuuj uruchamianie aplikacji w tle po zamknięciu Google Chrome”. To zmusi Chrome do całkowitego zamknięcia, a następnie usunie sesyjne pliki cookie.

Myślę jednak, że Chrome powinien sprawdzać i usuwać pliki cookie z poprzedniej sesji na początku zamiast zamykać.

Justmyhobby
źródło
10

Musiałem oba, niezaznaczone, w zaawansowanych ustawieniach Chrome:

  • „Kontynuuj uruchamianie aplikacji w tle po zamknięciu Google Chrome”
  • „Kontynuuj tam, gdzie skończyłem”, „Po uruchomieniu”
emottet
źródło
Powinno to zostać poddane wyższemu głosowaniu lub zredagowana najwyższa odpowiedź w celu uwzględnienia punktu „uruchomione aplikacje w tle”. Wpłynęło to na mnie. Wyłączenie „Kontynuuj tam, gdzie skończyłem” nie naprawiło tego. Musiałem także wyłączyć „Kontynuuj uruchamianie aplikacji w tle, gdy Google Chrome jest zamknięty”. Następnie moje sesyjne pliki cookie były poprawnie usuwane po zamknięciu Chrome.
Matt Welke
Myślę, że to rzeczywiście najlepsza odpowiedź.
L-Four
3

Prostą alternatywą jest użycie nowego obiektu sessionStorage . Zgodnie z komentarzami, jeśli zaznaczysz opcję „kontynuuj tam, gdzie przerwałem”, sessionStorage będzie się utrzymywać między restartami.

TimDog
źródło
9
Nie, to utrzymuje się między ponownymi uruchomieniami, jeśli zaznaczyłeś opcję „Kontynuuj tam, gdzie skończyłem”.
Olli
TimDog: „sessionStorage będzie trwał między restartami.”, @Olli „Nie, trwa między restartami”. Chłopaki, zgadzasz się czy kłócisz? Nie rozumiem :) Ach, czekaj, rozumiem ...
naXa
2

Miałem ten sam problem z „document.cookie” w Windows 8.1, jedynym sposobem, w jaki Chrome usuwa plik cookie, było zamknięcie go z menedżera zadań (nie jest to naprawdę wymyślny sposób), więc postanowiłem zarządzać ciasteczkami z backendu lub użyć czegoś jak „js-cookie”.

TurKux
źródło
1

Czy próbowałeś usunąć rozszerzenie Hangouts w Google Chrome? ponieważ zmusza Chrome do działania nawet po zamknięciu wszystkich okien.

Miałem również problem, ale teraz został rozwiązany.

Salman Ali Khan
źródło
1

Iść do chrome://settings/content/cookies?search=cookies

Włącz Clear cookies and site data when you quit Chrome.

Pracował dla mnie

Mihai Perju
źródło
-2

Jeśli ustawisz domenę dla pliku cookie sesji php, przeglądarki zdają się go trzymać przez około 30 sekund. Wydaje się, że nie ma znaczenia, czy zamkniesz kartę lub okno przeglądarki.

Jeśli więc zarządzasz sesjami przy użyciu czegoś takiego, może to powodować zawieszanie się pliku cookie w przeglądarce na dłużej niż oczekiwano.

ini_set("session.cookie_domain", 'www.domain.com');

Jedynym sposobem, w jaki udało mi się pozbyć wiszącego pliku cookie, jest usunięcie wiersza kodu, który ustawia domenę pliku cookie sesji. Uważaj również na funkcję session_set_cookie_params (). Wydaje się, że prefiks kropki w domenie nie ma wpływu na problem.

Może to być błąd php, ponieważ php wysyła plik cookie sesji (tj. PHPSESSID=b855ed53d007a42a1d0d798d958e42c9) W nagłówku po zniszczeniu sesji. Lub może to być problem z propagacją serwerów, ale nie sądzę, ponieważ mój test był na prywatnych serwerach.

SurferJoe
źródło
-2

Właśnie miałem problem z przechowywaniem identyfikatora sesji przez Chrome, ale nie podoba mi się pomysł wyłączenia opcji kontynuowania od momentu przerwania. Przejrzałem pliki cookie dla witryny i znalazłem plik cookie identyfikatora sesji dla strony logowania. Usunięcie tego nie rozwiązało mojego problemu. Poszukuję domeny i stwierdziłem, że w domenie jest inny plik cookie identyfikatora sesji. Usunięcie obu plików cookie identyfikatora sesji ręcznie rozwiązało problem, a ja nie zamknąłem i nie otworzyłem ponownie przeglądarki, która mogła przywrócić pliki cookie.

Lauren Tariel
źródło
-8

Google Chrome ma problem, jeśli nieprawidłowo ustawisz i rozbroisz pliki cookie. To jest kod php. Pomyślałem, że to da ci pomysł.

Ustaw ciasteczko

setcookie('userLoggedIn', 1, 0, PATH);

Niepoprawny sposób i nie będzie działać (zauważ, że PATH brakuje)

setcookie('userLoggedIn', 0, time()-3600);

Prawidłowy sposób naprawia problem w Google Chrome

setcookie('userLoggedIn', 0, time()-3600, PATH);
Akash Thapa
źródło
1
Pytanie nie dotyczy niewłaściwego pliku cookie.
John K