【问题标题】:setcookie for little time doesn't work in non-firefoxsetcookie for little time 在非 Firefox 中不起作用
【发布时间】: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


【解决方案1】:

由于我们已经知道您的服务器时间有几个小时的错误,因此 cookie 已经过期。

Firefox 仍然存储 cookie 的原因可能是它检测到服务器和客户端之间的奇数时间差,并使用 Date 值和 Expires 确定 cookie 过期日期的属性值。

这些问题也是后来的 RFC 标准(如当前的RFC 6265)更喜欢增量秒的相对时间值的原因。

【讨论】:

  • 所以火狐在获取cookie时只检查服务器时间,其他时间也检查本地时间,是否会出现这个cookie过期?
  • @Innuendo:我不确定。但这似乎是唯一合理的理由。您是否检查过该 cookie 在 Firefox 中的有效期?
猜你喜欢
  • 1970-01-01
  • 2014-09-27
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
相关资源
最近更新 更多