Defina um cookie para nunca expirar

Olhando para a documentação do php na configuração de um cookie , vejo que posso definir uma data de validade para o cookie. Você pode configurar o cookie para expirar no final da session do navegador ou em algum momento no futuro, mas não vejo uma maneira de configurar o cookie para nunca expirar. Isso é mesmo possível e como isso é realizado?

Todos os cookies expiram de acordo com as especificações dos cookies , então esta não é uma limitação PHP.

Use uma data futura próxima. Por exemplo, defina um cookie que expira em dez anos:

 setcookie( "CookieName", "CookieValue", time() + (10 * 365 * 24 * 60 * 60) ); 

Observe que, se você definir uma data após 2038 no PHP, o número será encerrado e você receberá um cookie que expira instantaneamente.

Valor máximo: 2147483647

 setcookie("CookieName", "CookieValue", 2147483647); 

Para evitar o excesso de número inteiro, o timestamp deve ser definido como:

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

Definir um valor maior pode causar problemas com navegadores mais antigos.

Veja também o RFC sobre cookies :

 Max-Age=value OPTIONAL. The value of the Max-Age attribute is delta-seconds, the lifetime of the cookie in seconds, a decimal non-negative integer. To handle cached cookies correctly, a client SHOULD calculate the age of the cookie according to the age calculation rules in the HTTP/1.1 specification [RFC2616]. When the age is greater than delta-seconds seconds, the client SHOULD discard the cookie. A value of zero means the cookie SHOULD be discarded immediately. 

e RFC 2616, 14.6 Idade :

Se um cache receber um valor maior que o maior número inteiro positivo, ele pode representar, ou se algum dos seus cálculos de idade transborda, DEVE transmitir um header Age com um valor de 2147483648 (2 ^ 31).

http://www.faqs.org/rfcs/rfc2616.html

Defina um futuro absoluto absoluto :

 setcookie("CookieName", "CookieValue", 2147483647); 

É melhor usar um tempo absoluto do que calculá-lo em relação ao presente como recomendado na resposta aceita.

O valor máximo compatível com sistemas de 32 bits é:

 2147483647 = 2^31 = ~year 2033 

Meu privilégio me impede de fazer meu comentário no primeiro post, então ele terá que ir aqui.

A consideração deve ser levada em consideração para 2038 erro unix ao configurar 20 anos de antecedência a partir da data atual que é sugerido como a resposta correta acima.

Seu cookie em 19 de janeiro de 2018 + (20 anos) poderia atingir o problema 2038, dependendo do navegador e ou versões em que você acabar executando.

Embora isso não seja exatamente possível, você pode fazer algo semelhante ao que o Google faz e configurar seu cookie para expirar em 17 de janeiro de 2038 ou algo igualmente distante.

Em toda a praticidade, você pode melhorar a configuração do seu cookie por 10 anos ou 60 * 60 * 24 * 365 * 10, o que deve sobreviver à maioria das máquinas em que o seu cookie irá viver.

Você não pode simplesmente dizer um loop sem fim, o cookie expira como data atual + 1 para que nunca atinja a data em que deveria expirar, porque sempre é amanhã? Um pouco exagerado, mas apenas dizendo.

Se você deseja manter os dados na máquina do cliente permanentemente – ou pelo menos até que o cache do navegador seja esvaziado completamente, use o armazenamento local do Javascript:

https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage

Não use armazenamento de session, pois será apagado como um cookie com uma idade máxima de Zero.

Eu acredito que não há uma maneira de fazer um cookie durar para sempre, mas você só precisa configurá-lo para expirar para o futuro, como o ano 2100.

Você não pode deixar o que se você definir o tempo de expiração até agora + 100 anos?

Você não deve fazer isso e isso não é possível de qualquer maneira, se você quiser, você pode definir um valor maior, como 10 anos à frente.

Por sinal, nunca vi um cookie com esse requisito 🙂

Não tenho certeza, mas não são cookies excluídos no navegador fechados? De alguma forma, um cookie nunca expirado e o cromo reconheceram a data expirada como “no navegador fechar” …