2011-05-22 69 views
0

在测试一些脚本时,我注意到,如果过期时间很少(不为零)--Cookie在Opera,IE中不可用。setcookie很短的时间在非Firefox中不起作用

例子:

<?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 - 它适用于所有浏览器。

这是什么原因?

UPD:

从丁目的开发工具(对不起,不知道怎么萤火Chrome的称呼):

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 

日期是早于 '过期';

+0

你检查了实际的* Set-Cookie *头字段值吗?您的服务器可能有错误的系统时间。 – Gumbo 2011-05-22 11:00:04

+0

是的,服务器上的时间是错误的。 (几个小时延迟)但是这反映在不同的浏览器上如何? – 2011-05-22 11:07:59

+0

@Innuendo:恩,可能是个bug。但它需要更多的信息来说明这一点。 – Gumbo 2011-05-22 11:11:01

回答

1

由于我们已经获得您的服务器的时间在几个小时内是错误的,因此cookies已经过期。

为什么火狐仍然存储的cookie可能是因为它检测到服务器和客户端之间的奇数时间差,并使用日期值之间的差和过期属性值来决定cookie有效期的原因。

这些问题也是为什么后面的RFC标准如当前的RFC 6265更喜欢delta秒的相对时间值的原因。

+0

所以火狐浏览器只检查服务器时间,但其他时间检查和本地时间太多,同时得到cookie,并发生这个cookie已过期? – 2011-05-22 12:38:53

+0

@Innuendo:我不确定。但似乎是唯一合理的原因。您是否检查了该cookie在Firefox中的有效期限? – Gumbo 2011-05-22 12:43:59