1

在 PHP中删除 cookie :

我在互联网上读到,也在我的课程幻灯片上读到,如果我们将过期日期设置为“time()-3600”,我们无法确定 cookie 是否会被客户端删除,

因为客户端时间和服务器时间可能不同。

我同意最后的说法,但是如果“time()”函数返回纪元值,为什么客户端不会删除 cookie?不是绝对值吗?

我认为如果我们设置 time()-3600,响应头 set-cookie 将过期日期作为绝对值,当 cookie 过期时,浏览器可以解释该值以查找数据(作为客户端本地数据)。

我做错了吗?

4

2 回答 2

2
  • time()根据您服务器的时钟返回自 1970 年 1 月 1 日午夜 UTC 以来的秒数。
  • setcookie然后将其格式化为HTTP 所需的字符串格式,该格式始终以 GMT 表示。
  • 客户端(浏览器)然后将解析该日期字符串,并根据自己的时钟将其与 GMT 中的当前时间进行比较。

因此,正确配置的服务器和客户端应该同意由 生成的值time() - 3600是过去的,因此 cookie 将被删除。

但是,这可能会出错的原因有很多:

  • 服务器的时钟已经提前了一个多小时。
  • 服务器的时区配置错误,导致time()本地时间无法正确调整为 UTC 时间。
  • 客户的时钟晚了一个多小时。
  • 客户端的时区配置错误,导致无法正确与 GMT 进行比较。

还值得注意的是,通常你不能保证客户会做任何你想做的事情。如果出于安全原因要使会话无效,则必须在服务器上使其无效,并删除 cookie 只是为了方便。

于 2019-06-24T13:43:53.163 回答
2

客户的时钟可能与实际时间有很大偏差。在那种情况下不管time()是不是绝对时间,如果客户端机器有错误的时间,它可能会解释绝对时间错误,并认为过期时间还在未来。

于 2019-06-24T13:37:27.193 回答