NYCPHP Meetup

NYPHP.org

[nycphp-talk] cookies and experiation

Jim Yi jim at jimyi.com
Sun Jul 10 10:44:03 EDT 2011


PHP has some useful predefined constants, particularly PHP_INT_MAX in this
case (http://php.net/manual/en/reserved.constants.php).  What you should
really be doing while setting the cookie is ignoring time() completely, and
just set the expiration time to the maximum size of an integer.

  setcookie(“name”, “val”, PHP_INT_MAX);

This way, the cookie expires in 2038 for everyone, which is the furthest
expiration you can set anyway.

On a more theoretical note, there really isn't a need to set a cookie's
expiration date beyond, let's say 5 years.  For that cookie to even still be
alive, you have to hope that the user:
- is using the same computer for five years
- has never reformatted the hard drive or re-installed a fresh OS
- has never switched browsers
- has never cleared their cookies

I'd say a combination of all of the above is extremely rare, and I can't
really think of a good use-case where a cookie would still be useful 5 years
from now, given that the internet is constantly evolving.

---
Jim Yi


On Sun, Jul 10, 2011 at 9:56 AM, Margaret Waldman <mmwaldman at nyc.rr.com>wrote:

>   I wanted to create a cookie that basically never expires.
>
> time() + x
>
> We can live to say 100 or so, so say 125 years expiration would be good.
>
> time() + 3944700000
>
> But that number is too big.
>
> Intval says on a 32 bit machine max is 2147483647.
>
> So 2147483647 – time() = 4294967294, which is bigger than 2147483647
>
> 2147483647 = 68 years but because I’m adding time it grows bigger than the
> bigger integer
>
> But I really can only do this 2147483647  - time() = 837178076 26 years
>
> But php wasn’t crapping out on 290000000 + time(), so what really is the
> biggest integer
>
> Time today =            1310305571
> Time tomorrow =     1310391971
> Next year will be =   1341863171 (42 years)
> In 20 years will be = 1372420841 (52 years)
>
> So, 2147483647 – time in 20 year (1372420841) = 775062806 approx 23 years
>
> The numbers don’t look quite right but at time increases the life time you
> can extend in ints decreases.
>
> So, instead of just adding a value to time, I should
>
> $newLife = 2147483647  - time();
>
> setcookie(“name”, “val”, time() + newLife);
>
> I’m sure by the time, time() grows to be so big that this formula is an
> issue, integers will be big enough to handle it?
>
> Anyway, does anyone know the real max size of an integer? Cause it ain’t
> 2147483647 like the docs say for a 32 bit machine.
>
> Margaret Michele Waldman
>
> _______________________________________________
> New York PHP Users Group Community Talk Mailing List
> http://lists.nyphp.org/mailman/listinfo/talk
>
> http://www.nyphp.org/Show-Participation
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.nyphp.org/pipermail/talk/attachments/20110710/c606681e/attachment.html>


More information about the talk mailing list