PHP - 未来过期日期过多时未设置cookie

时间:2014-07-01 22:49:43

标签: php cookies methods setcookie

发现问题,请参见下文

我有一个PHP页面,我保存了一个cookie:

include "scripts/mytoolkit.php";

...
if ($val != "") saveCookie('mycookie', $val, 100*365, "www.domain.com");  // tested, $val is not empty and is a string. Want to keep the cookie for 100 years :-))
...

使用mytoolkit.php

function saveCookie($name, $value, $days, $domain)
{
$expires = 0;

    // tested, $name and $value are correct and filled

    if (isset($days)) 
           $expires = time()+$days*24*60*60;   // tested, the method enters there

    setcookie ($name, $value, $expires, "/", $domain);
}

function readCookie($name)
{
    if(isset($_COOKIE[$name])) return $_COOKIE[$name];
    return null;
}

稍后,在重新加载页面后,我会检查cookie并将其打印出来:

...
$val = readCookie('mycookie');
print ($val);
...

问题是$ val是空的,当然没有设置cookie。

但是...

如果我只是更换电话:

saveCookie('mycookie', $val, 100*365, "www.domain.com");

通过以下内容:

setcookie ('mycookie', $val, time()+100*365, "/", "www.domain.com");

或保持

 saveCookie('mycookie', $val, 100*365, "www.domain.com");

但从*24*60*60;方法

中删除saveCookie

然后一切正常,$ val填充了cookie值,并且cookie设置得很好。

使用该方法设置cookie会出现什么问题?

问题

问题在于我想将cookie保存100年。如果我提出更有限的延迟,比如10年,那就可以了。

问题是:为什么我在设置cookie时可以在javascript中使用100年,为什么我不能使用PHP做同样的事情?

1 个答案:

答案 0 :(得分:0)

来自http://www.php.net/set_cookie

  

Cookie过期的时间。这是一个Unix时间戳,所以数量也是如此   自纪元以来的几秒钟。换句话说,你很可能会设置   这与time()函数加上你之前的秒数   希望它过期。或者你可以使用mktime()。时间()+ 60 * 60 * 24 * 30会   将Cookie设置为在30天后过期。如果设置为0,或省略,则   cookie将在会话结束时(浏览器时)到期   关闭)。

问题可能是因为您尝试设置超过unix时间戳限制的过期时间戳 AND 您的php是32位版本。使用32位int的系统上unix时间戳的限制是2038年1月19日。

来自http://www.unixtimestamp.com/index.php

  

2038年1月19日会发生什么?

     

在此日期,由于32位,Unix时间戳将停止工作   溢出。在此之前,需要数百万个应用程序   要么采用新的时间戳约定,要么迁移到64位   系统会花费更多的时间来购买时间戳。