PHP cookie时间格式不起作用

问题描述 投票:4回答:3

我有这两个Cookie,它们确实可以工作,但前提是Cookie的有效期为5小时以上,且没有任何问题。如果我将cookie的过期时间设置为0,它也可以工作,但是我需要cookie在2小时后过期。当我将Cookie设置为在2小时后过期时,它在firefox中有效,但在Chrome或IE中则无法。

如果过期时间是从现在开始的五个小时或更长时间,我只会看到浏览器(Chrome)获取Cookie。还是将到期时间设置为0。我在做什么错?

setcookie('expire', 'test', time() + 7200, "/");

我不知道为什么时间功能不起作用,所以我的cookie将在两个小时后失效。

任何帮助将不胜感激。

php cookies
3个回答
9
投票

所以-您在美国中部或东部时区吗?您的时间戳很有可能被解释为UTC,因此只有在偏移量上有效。使用像phpdate的C或R这样的格式更安全:

$date = new Datetime('+2 hours');
setcookie('expire', 'test', $date->format('C'), "/");

甚至更好,使用预定义的cookie日期格式:

setcookie('expire', 'test', $date->format(DateTime::COOKIE), "/");

这些包含字符串中的偏移量,因此浏览器无法将其弄乱。同样,由于它采用人类可读的格式,因此在查看响应标题时,也使故障排除变得更加容易。


0
投票

如果您在服务器上执行此操作,请仔细检查开发服务器上的时间是否正确-我知道我遇到了与此完全相同的问题,而服务器时间太短最终成了罪魁祸首。


0
投票

接受的答案与doc php.net/manual/en/function.setcookie.php不兼容。 doc的第三个参数expire必须是整数(int $ expires = 0),但是$ date-> format()会生成字符串。也许它可以在某些古老的PHP版本中使用。我已经测试了一些最新版本,从PHP 5.4到PHP 7.2,有一个警告setcookie() expects parameter 3 to be long/integer, string given并且未设置cookie,PHP 7.3设置了没有expire属性的cookie(无警告)。

© www.soinside.com 2019 - 2024. All rights reserved.