2013-10-01 11 views
8

Wiem, że to pytanie zostało zadane tysiąc razy, ale żadna z odpowiedzi naprawdę nie daje mi tego, czego szukam. Używam jQuery cookie do przechowywania niektórych informacji, ale chcę, aby wygasły po zamknięciu przeglądarki. window.unload nie jest realną opcją (czytaj: nie działa.)Czy pliki cookie jQuery mogą wygasnąć, tak jak zmienne sesji?

Moje pytanie brzmi: czy jest to rzeczywiście możliwemieć cookie wygaśnie, gdy przeglądarka zamyka, niczym sesji? Jeśli tak, to czy ktoś wie jak?

Aktualizacja: Okazuje się, że jest to dosyć proste, zamiast przekazywać wygaśnięcia: 0 (który nie działa), po prostu nie przechodzą żadnej wygaśnięciu w ogóle. To wyjaśnia, dlaczego nie było zbyt wielu pytań.

Dzięki wszystkim.

+1

HTTP musi wysłać dat wygaśnięcia. Sprawdź RFC i implementację, jeśli wyśle ​​poprawne daty. (Musi być w przeszłości.) – schlingel

Odpowiedz

18

Okazuje się, że jest to dosyć proste, zamiast przekazywać wygaśnięcia: 0 (który nie działa), po prostu nie w żaden sposób nie wygasają. To wyjaśnia, dlaczego nie było zbyt wielu pytań.

Więc zamiast przechodzenia wygaśnięcie z flagami tak:

$.cookie(key, value, { expiry: 0, domain: '', path: '' }); 

po prostu pominąć wartość ważności:

$.cookie(key, value, { domain: '', path: '' }); 

I to działa. To takie proste, że mnie zdezorientowało.

Ale dzięki!

2

Jest to możliwe w RFC 2965 specification. Powiedział, że byłoby to możliwe, jeśli ustawisz właściwość "Odrzuć" w kodzie obsługi plików cookie i, jeśli przeglądarka je obsługuje.

Powiedział: plik cookie jQuery nie obsługuje właściwości Discard. Trzeba by przedłużyć kod jQuery-Cookie jak tak (chodzi o linię 57 w oryginalnym pliku):

 return (document.cookie = [ 
      config.raw ? key : encodeURIComponent(key), 
      '=', 
      config.raw ? value : encodeURIComponent(value), 
      options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE 
      options.path ? '; path=' + options.path : '', 
      options.domain ? '; domain=' + options.domain : '', 
          options.discard ? '; Discard=' + options.discard : '', 
      options.secure ? '; secure' : '' 
     ].join('')); 
0

jeśli używasz domyślnej konfiguracji jak ten

$.cookie.defaults = { path: '/', expires: 365 }; 

następnie trzeba użyć następujący atrybut dla każdej wartości ciasteczka

$.cookie(key, value, { expires: null });