It can not be set to never expire.
Cookies should be stored in a tightly closed container or wrapped with plastic wrap to keep out air and other contaminants. For a long-term option, you can freeze your cookies while preserving their taste if you use an air-tight freezer safe container.
There are two types of cookies: session cookies and persistent cookies. Web browsers normally delete session cookies when the user closes the browser. Unlike other cookies, session cookies do not have an expiration date assigned to them, which is how the browser knows to treat them as session cookies.
Set an expiration date for a cookie This can be done easily by adding expires=expirationDate in UTC separated by semicolon from the name=value, as seen in the following example: document. cookie = "username=Max Brown; expires=Wed, 05 Aug 2020 23:00:00 UTC"; document.
All cookies expire as per the cookie specification, so this is not a PHP limitation.
Use a far future date. For example, set a cookie that expires in ten years:
setcookie(
"CookieName",
"CookieValue",
time() + (10 * 365 * 24 * 60 * 60)
);
Note that if you set a date past 2038 in 32-bit PHP, the number will wrap around and you'll get a cookie that expires instantly.
Maximum value: 2147483647
setcookie("CookieName", "CookieValue", 2147483647);
To avoid integer overflow the timestamp should be set to:
2^31 - 1 = 2147483647 = 2038-01-19 04:14:07
Setting a higher value might cause problems with older browsers.
Also see the RFC about 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.
and RFC 2616, 14.6 Age:
If a cache receives a value larger than the largest positive integer it can represent, or if any of its age calculations overflows, it MUST transmit an Age header with a value of 2147483648 (2^31).
http://www.faqs.org/rfcs/rfc2616.html
Set a far future absolute time:
setcookie("CookieName", "CookieValue", 2147483647);
It is better to use an absolute time than calculating it relative to the present as recommended in the accepted answer.
The maximum value compatible with 32 bits systems is:
2147483647 = 2^31 = ~year 2038
My privilege prevents me making my comment on the first post so it will have to go here.
Consideration should be taken into account of 2038 unix bug when setting 20 years in advance from the current date which is suggest as the correct answer above.
Your cookie on January 19, 2018 + (20 years) could well hit 2038 problem depending on the browser and or versions you end up running on.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With