[英]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表示。 因此,正确配置的服务器和客户端应同意time() - 3600
生成的值已过去,因此将删除cookie。
但是,有很多原因可能会导致此错误:
time()
无法正确将本地时间调整为UTC时间。 值得注意的是,通常您不能保证客户会做任何您想做的事情 。 如果出于安全原因要使会话无效,则必须在服务器上使该会话无效,并且仅出于其他便利而删除cookie。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.