Cookie Javascript sem data de validade

142

Gostaria de configurar um cookie que nunca expira. Isso seria possível?

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

Eu não quero tornar a data muito grande, estou apenas imaginando se havia um valor para o parâmetro expires no cookie que informava para nunca expirar.

Obrigado.

Jose Vega
fonte
1
Por que você não quer aumentar a data?
10139 AnthonyWJones
13
aumentar a data me faz sentir como se estivesse trapaceando. Se esse é o único caminho a percorrer, acho que terei que aumentar a data.
21713 Jose Vega

Respostas:

169

Não. Não pode ser feito. A 'maneira' de fazer isso é apenas fazer com que a data de validade seja como 2030.

Paolo Bergantino
fonte
31
Só faltam mais quatro anos. Espero que você tenha atualizado o cookie.
antony.ouseph.k
160
2020 - o ano do cookiepocalypse
JeffreyPia
14
Porra, está se aproximando a cada ano, espero que seu código seja atualizado.
precisa saber é
22
É editado para 2030 agora, estamos adiando nossa desgraça por mais 10 anos
Simeon Nakov
7
Então, basicamente, em janeiro 19, 2038, Chewie vai sentar-se no Millennium Falcon e reclamar sobre o pop-up política de cookies no galáctico mapa API mais uma vez ...
nickhar
108

Não há sintaxe para o que você deseja. Não definir expirar faz com que o cookie expire no final da sessão. A única opção é escolher algum valor arbitrariamente grande. Esteja ciente de que alguns navegadores têm problemas com datas anteriores a 2038 (quando o tempo da época unix excede um int de 32 bits).

Jamie
fonte
25
2038-01-19, 03:14:08 UTC, para ser mais preciso.
Wilhelm Klopp
Só para esclarecer: isso é uma regra, funcionando da mesma maneira em todos os navegadores? o que significa que, se eu não definir a data de validade, o cookie durará apenas até o final da sessão.
prata Ringvee
2
Um cookie criado sem uma diretiva Expiresou Max-Ageé um cookie de sessão: é excluído quando o cliente é encerrado. No entanto, os navegadores da Web podem usar a restauração de sessão , o que torna a maioria dos cookies de sessão permanentes, como se o navegador nunca tivesse sido fechado. ( fonte: MDN )
mfluehr
67

Você pode fazer o exemplo nos documentos do Mozilla :

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

PS

Obviamente, haverá um problema se a humanidade ainda usar seu código no primeiro minuto do ano 10000 :)

Nimir
fonte
89
Tem certeza que é sexta-feira?
David
8
google.com/… *
Adam Nelson
5
Não funcionou para mim usando o npmjs.com/package/universal-cookie . Foi com a solução do ano 2038 . Eu escrevi um bilhete para voltar em 2030 para ver se há uma correção.
Hinrich
15

Todos os cookies expiram de acordo com a especificação do cookie . O valor máximo que você pode definir é

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

Portanto, o tempo máximo de vida útil do cookie é

$.cookie('subscripted_24', true, { expires: 2147483647 });
Yuseferi
fonte
7
Esse número não funcionou para mim. Após algumas tentativas e erros, o número mais alto que consegui usar foi 99983090 (expira = sexta-feira, 12 de setembro de 275760 18:10:24 GMT). Qualquer coisa maior retornou "Data inválida"
JeffreyPia
Se você passar um número como parâmetro expirar para jquery-cookie ou js-cookie, levará alguns dias para expirar a partir de agora. Se você deseja uma data fixa, deve passar um objeto Date.
Dario Seidl
O código acima usa o plugin jquery-cookie que foi retirado em favor do js-cookie .
Jens
2
para vanilla JS:document.cookie = 'subscripted_24=true; expires=' + new Date(2147483647 * 1000).toUTCString();
Oksana Romaniv
12

Você pode definir um cookie na data de vencimento de um mês ou algo assim e reatribuir o cookie toda vez que o usuário visitar o site novamente

Liam Martens
fonte
1
Esta é a resposta certa para definir cookies sem fim. E se você precisar levar em conta que o usuário nunca fecha o site, poderá implementar uma condição adicional para atualizar os cookies por qualquer ação ou após um certo tempo.
Alex Shink
9

Se você não definir uma data de validade, o cookie expirará no final da sessão do usuário. Eu recomendo usar a data antes que o tempo da época unix seja estendido para um número inteiro de 32 bits. Para colocar isso no cookie que você usaria document.cookie = "randomCookie=true; expires=Tue, 19 Jan 2038 03:14:07 UTC;, assumindo que esse randomCookieé o cookie que você está configurando e que trueé seu respectivo valor.

Benjamin Easterling
fonte
2

VOCÊ NÃO PODE . Não há código exato a ser usado para definir um cookie permanente, mas um truque antigo serve, como current time + 10 years.

Apenas uma observação de que qualquer data além January 2038o condenará pelos cookies ( int de 32 bits ) serão excluídos instantaneamente. Deseje um milagre que seja corrigido no futuro próximo. Para int de 64 bits , os próximos anos 2110serão seguros. À medida que o tempo passa, o software e o hardware mudam e podem nunca se adaptar aos mais antigos (as coisas que temos agora), então prepare o agora para o futuro .

Veja o problema do ano 2038

rhavendc
fonte
3
Eu acho que você não percebe o quão longe no futuro, um computador de 64 bits pode contar , ou seja, 292,000 milhões ano
Gust van de Wal
@GustvandeWal So yeah? Eu já li isso. Inclusive incluí esse link na minha resposta.
rhavendc
1
Da sua resposta: para int de 64 bits , os anos em torno de 2110 estarão seguros. Parece suspeito que você espera que os computadores de 64 bits sejam contados duas vezes mais do que os computadores de 32 bits (1970 -> 2035 -> 2110)
Gust van de Wal
@GustvandeWal Desculpe se minhas palavras parecem suspeitas. Talvez não seja a melhor maneira de dizer isso em inglês. Mas, ei, eu não esperava ou pensei que tipo de idéia você acabou de dizer.
rhavendc
4
Uma pequena observação: se usarmos processadores de 33 bits, o ano de 2110 faria sentido.
hegez
1

Se você pretende ler os dados apenas do lado do cliente, pode usar o armazenamento local. Ele é excluído apenas quando o cache do navegador é limpo.

jfhfhf839
fonte
Ou o navegador está fechado ou o computador está desligado
Redwolf Programs
@RedwolfPrograms Desde quando o armazenamento local é limpo quando o navegador é fechado ou o computador é desligado?
Igor Jerosimić 15/04/19
@ IgorJerosimić Opa! Acho que pensei que por causa de um bug em um local da mina ...
RedWolf Programas
-2

Você pode fazer com que um cookie nunca termine definindo-o para qualquer data mais uma a mais do que o ano atual como este:

var d = new Date();    
document.cookie = "username=John Doe; expires=Thu, 18 Dec " + (d.getFullYear() + 1) + " 12:00:00 UTC";
Jak
fonte
1
Ele expirará após um ano, e não durará indefinidamente (AFAIK).
Solomon Ucko