繁体   English   中英

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

[英]Is setting cookie expiration time: “time()-3600”, always correct?

用于删除PHP中的cookie

我在互联网上以及课程幻灯片上都读到,如果我们将有效期设置为“ time()-3600”,我们将无法确保客户端会删除Cookie,

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

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

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

我做错了吗?

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM