设置Cookie过期时间:“ time()-3600”是否始终正确?

时间:2019-06-23 10:26:22

标签: php cookies setcookie expired-cookies

用于删除PHP中的cookie

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

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

我同意上一条语句,但是如果“ time()”函数返回epoch值,为什么客户机不删除cookie? 这不是绝对价值吗?

我认为,如果我们设置time()-3600,则响应头set-cookie的有效期限为绝对值,并且cookie过期时浏览器可以解释该值以查找数据(作为客户端本地数据)

我做错了吗?

2 个答案:

答案 0 :(得分:0)

客户的时钟可能与实际时间有明显偏差。在这种情况下,time()是否为绝对值无关紧要,如果客户端计算机的时间错误,则可能会将绝对时间解释为错误,并认为到期时间仍在将来。 >

答案 1 :(得分:0)

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

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

但是,有很多原因可能会导致错误:

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

值得注意的是,通常来说,您不能保证保证客户会做任何您想做的。如果出于安全原因要使会话无效,则必须在服务器上使其无效,并仅出于其他便利而删除cookie。