【发布时间】:2011-08-30 13:20:23
【问题描述】:
在测试一些脚本时,我注意到,如果过期时间很短(不为零)- cookie 在 Chrome、Opera、IE 中不可用。
例子:
<?php
// setting cookie for 5 minutes
setcookie( 'cookie1' , 'Test', time()+60*5 );
echo $_COOKIE['cookie1'];
// yeap (it should display it only with refresh of page - I know:)
?>
在 Firefox 中 - 我看到“测试”一词(打开并刷新页面后)。
但在其他浏览器中 - 我看不到这个。
例如,如果我将时间更改为 time()+60*100 - 它在所有浏览器中都可以正常工作。
这是什么原因?
更新:
来自 Chome Dev Tool(抱歉,不知道 Chrome firebug 是怎么调用的):
Date:Sun, 22 May 2011 10:29:59 GMT
Keep-Alive:timeout=15, max=99
Server:Apache/2.2.14 (Ubuntu)
Set-Cookie:Maslo123=Test; expires=Sun, 22-May-2011 10:34:59 GMT
日期早于“过期”;
【问题讨论】:
-
您是否检查了实际的 Set-Cookie 标头字段值?您的服务器可能有错误的系统时间。
-
是的,服务器上的时间不对。 (延迟几个小时)但这如何反映在不同的浏览器上?
-
@Innuendo:嗯,可能是一个错误。但这需要更多信息来说明。
-
如果您阅读手册(此处具体说明)php.net/manual/en/function.setcookie.php#96813,您不应该依赖 cookie 进行短期/时间存储,您会看到使用 cookie 的弊端
-
@Lawrence Cherone:您链接到的陈述是错误的。 Expires 值是一个绝对时间值,因为它指的是 GMT,无论客户端/服务器位于何处。但是,如果机器没有使用正确的时间,绝对时间值仍然会失败。
标签: php cookies cross-browser