Cookie Javascript senza data di scadenza


143

Vorrei impostare un cookie che non scade mai. Sarebbe possibile?

 document.cookie = "name=value; expires=date; path=path;domain=domain; secure";

Non voglio rendere la data molto grande, mi chiedo solo se ci fosse un valore per il parametro expires sul cookie che gli dicesse di non scadere mai.

Grazie.


1
Perché non vuoi che la data sia grande?
AnthonyWJones,

13
rendere la data grande mi fa sentire come se stessi tradendo. Se questa è l'unica strada da percorrere, suppongo che dovrò rendere la data grande.
Jose Vega,

Risposte:


170

No. Non si può fare. Il miglior "modo" per farlo è semplicemente rendere la data di scadenza del 2100.


32
Mancano solo altri quattro anni. Spero che tu abbia aggiornato il cookie.
antony.ouseph.k

161
2020 - l'anno della cookiepocalypse
JeffreyPia,

15
Accidenti, si avvicina ogni anno, spero che il tuo codice sia stato aggiornato.
Kartsims,

23
È stato modificato al 2030 ora, stiamo rimandando il nostro destino di altri 10 anni
Simeon Nakov,

7
Quindi, fondamentalmente, il 19 gennaio 2038, Chewie siederà nel Millennium Falcon e si lamenterà ancora una volta del pop-up della cookie policy
sull'API

108

Non c'è sintassi per quello che vuoi. Se l'impostazione non scade, il cookie scade alla fine della sessione. L'unica opzione è quella di scegliere un valore arbitrariamente grande. Tieni presente che alcuni browser hanno problemi con le date oltre il 2038 (quando il tempo di epoche unix supera un int a 32 bit).


25
2038-01-19, 03:14:08 UTC, per la precisione.
Wilhelm Klopp,

Giusto per chiarire: è una regola che funziona allo stesso modo in tutti i browser? ciò significa che se non imposto la data di scadenza, il cookie durerà solo fino alla fine della sessione.
Silver Ringvee,

2
Un cookie creato senza una direttiva Expireso Max-Ageè un cookie di sessione: viene eliminato all'arresto del client. Tuttavia, i browser Web possono utilizzare il ripristino della sessione , il che rende permanenti la maggior parte dei cookie di sessione, come se il browser non fosse mai chiuso. ( fonte: MDN )
mfluehr,

67

Puoi fare come l'esempio sui documenti di Mozilla :

 document.cookie = "someCookieName=true; expires=Fri, 31 Dec 9999 23:59:59 GMT";

PS

Certo, ci sarà un problema se l'umanità usa ancora il tuo codice nel primo minuto dell'anno 10000 :)


89
Sei sicuro che sia un venerdì?
David,


5
Non ha funzionato per me utilizzando npmjs.com/package/universal-cookie . Sono andato con la soluzione dell'anno 2038 . Ho scritto un biglietto per tornare nel 2030 per vedere se c'è una correzione.
Hinrich,

15

Tutti i cookie scadono secondo le specifiche dei cookie , il valore massimo che puoi impostare è

 2^31 - 1 = 2147483647 = 2038-01-19 04:14:07

Quindi la durata massima dei cookie è

$.cookie('subscripted_24', true, { expires: 2147483647 });

7
Quel numero non ha funzionato per me. Dopo un po 'di tentativi ed errori, il numero più alto che sono stato in grado di utilizzare era 99983090 (scade = venerdì, 12 settembre 275760 18:10:24 GMT). Nulla di più elevato ha restituito "Data non valida"
JeffreyPia,

Se si passa un numero come parametro di scadenza a jquery-cookie o js-cookie, ci vorranno come giorni per scadere da adesso. Se vuoi una data fissa devi invece passare un oggetto Date.
Dario Seidl,

Il codice sopra usa il plugin jquery-cookie che è stato ritirato a favore di js-cookie .
Jens,

2
per la vaniglia JS:document.cookie = 'subscripted_24=true; expires=' + new Date(2147483647 * 1000).toUTCString();
Oksana Romaniv,

12

È possibile che tu possa impostare un cookie alla data di scadenza di un mese o qualcosa del genere e quindi riassegnare il cookie ogni volta che l'utente visita nuovamente il sito Web


1
Questa è la risposta giusta per impostare infiniti cookie. E se devi tener conto del fatto che l'utente non chiude mai il sito, puoi implementare una condizione aggiuntiva per l'aggiornamento dei cookie con qualsiasi azione o dopo un certo tempo.
Alex Shink,

10

Se non si imposta una data di scadenza, il cookie scadrà al termine della sessione dell'utente. Raccomando di usare la data subito prima che il tempo di epoca unix si estenda oltre un numero intero a 32 bit. Per inserirlo nel cookie che useresti document.cookie = "randomCookie=true; expires=Tue, 19 Jan 2038 03:14:07 UTC;, supponendo che randomCookiesia il cookie che stai impostando ed trueè il rispettivo valore.


2

NON PUOI proprio . Non esiste un codice esatto da utilizzare per impostare un cookie per sempre, ma un vecchio trucco farà, comecurrent time + 10 years .

Solo una nota che qualsiasi data successiva January 2038ti condannerà per i cookie ( int a 32 bit ) verrà eliminata istantaneamente. Desideri un miracolo che verrà risolto nel prossimo futuro. Per int a 64 bit , gli anni 2110saranno al sicuro. Con il passare del tempo, il software e l'hardware cambieranno e potrebbero non adattarsi mai a quelli più vecchi (le cose che abbiamo ora), quindi prepara ora il futuro .

Vedi problema dell'anno 2038


3
Penso che non ti rendi conto di quanto lontano possa contare in futuro un computer a 64 bit , vale a dire 292 miliardi di anni
Gust van de Wal

@GustvandeWal Quindi sì? L'ho già letto. Ho anche incluso quel link nella mia risposta.
rhavendc,

1
Dalla tua risposta: per int a 64 bit , gli anni intorno al 2110 saranno al sicuro. Sembra sospettosamente come se ti aspettassi che i computer a 64 bit contino il doppio dei computer a 32 bit (1970 -> 2035 -> 2110)
Gust van de Wal

@GustvandeWal Scusate se le mie parole sembrano sospette. Forse non è il modo migliore per dirlo in inglese. Ma hey, non mi aspettavo o pensavo a quel tipo di idea che hai appena detto.
rhavendc,

4
Una piccola nota: se usassimo processori a 33 bit, allora l'anno 2110 avrebbe senso.
Hegez,

1

Se si intende leggere i dati solo dal lato client, è possibile utilizzare l'archiviazione locale. Viene eliminato solo quando viene cancellata la cache del browser.


Oppure il browser è chiuso o il computer è spento
Programmi Redwolf,

@RedwolfPrograms Da quando viene cancellata la memoria locale alla chiusura del browser o allo spegnimento del computer?
Igor Jerosimić,

@ IgorJerosimić Oops! Immagino di aver pensato che a causa di un bug in un mio sito ...
Programmi Redwolf

-2

Puoi fare in modo che un cookie non finisca mai impostandolo su qualsiasi data più una in più dell'anno corrente in questo modo:

var d = new Date();    
document.cookie = "username=John Doe; expires=Thu, 18 Dec " + (d.getFullYear() + 1) + " 12:00:00 UTC";

1
Scadrà dopo un anno, non durerà indefinitamente (AFAIK).
Solomon Ucko,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.