发现问题,请参见下文
我有一个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做同样的事情?
答案 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位 系统会花费更多的时间来购买时间戳。