设置 cookie 过期时间:"time()-3600",总是正确的吗?
Is setting cookie expiration time: "time()-3600", always correct?
删除 PHP 中的 cookie:
我在互联网上阅读,也在我的课程幻灯片上阅读,
如果我们将过期日期设置为 "time()-3600",我们将无法确定 cookie 是否会被客户端删除,
因为客户端时间和服务器时间可能不同。
我同意最后的说法,但是如果 "time()" 函数 return 纪元值,为什么客户端可能不会删除 cookie?
不是绝对值吗?
我认为如果我们设置 time()-3600,响应头 set-cookie 将过期日期作为绝对值,浏览器可以解释该值以查找数据(作为客户端本地数据),当 cookie已过期。
我做错了吗?
客户的时钟可能与实际时间有明显偏差。在那种情况下 time()
是否绝对无关紧要,如果客户端机器有错误的时间,它可能会解释错误的绝对时间,并认为过期时间还在未来。
time()
returns 自 1970 年 1 月 1 日午夜 UTC 以来的秒数,根据您服务器的时钟。
setcookie
然后会将其格式化为 the string format required by HTTP,它始终以 GMT 表示。
- 然后客户端(浏览器)将解析该日期字符串,并将其与 GMT 根据自己的时钟 .
的当前时间进行比较
因此,正确配置的服务器和客户端应该同意 time() - 3600
生成的值是过去的,因此 cookie 将被删除。
但是,这可能会出错的原因有很多:
- 服务器时钟提前了一个多小时。
- 服务器时区配置错误,导致
time()
无法正确调整本地时间为UTC时间。
- 客户的时钟慢了一个多小时。
- 客户端的时区配置错误,导致与GMT的对比不正确
还值得注意的是,通常您不能保证客户会任何您想要的。如果您出于安全原因想要使会话无效,您必须在服务器上使它无效,并且删除 cookie 只是为了方便。
删除 PHP 中的 cookie:
我在互联网上阅读,也在我的课程幻灯片上阅读, 如果我们将过期日期设置为 "time()-3600",我们将无法确定 cookie 是否会被客户端删除,
因为客户端时间和服务器时间可能不同。
我同意最后的说法,但是如果 "time()" 函数 return 纪元值,为什么客户端可能不会删除 cookie? 不是绝对值吗?
我认为如果我们设置 time()-3600,响应头 set-cookie 将过期日期作为绝对值,浏览器可以解释该值以查找数据(作为客户端本地数据),当 cookie已过期。
我做错了吗?
客户的时钟可能与实际时间有明显偏差。在那种情况下 time()
是否绝对无关紧要,如果客户端机器有错误的时间,它可能会解释错误的绝对时间,并认为过期时间还在未来。
time()
returns 自 1970 年 1 月 1 日午夜 UTC 以来的秒数,根据您服务器的时钟。setcookie
然后会将其格式化为 the string format required by HTTP,它始终以 GMT 表示。- 然后客户端(浏览器)将解析该日期字符串,并将其与 GMT 根据自己的时钟 . 的当前时间进行比较
因此,正确配置的服务器和客户端应该同意 time() - 3600
生成的值是过去的,因此 cookie 将被删除。
但是,这可能会出错的原因有很多:
- 服务器时钟提前了一个多小时。
- 服务器时区配置错误,导致
time()
无法正确调整本地时间为UTC时间。 - 客户的时钟慢了一个多小时。
- 客户端的时区配置错误,导致与GMT的对比不正确
还值得注意的是,通常您不能保证客户会任何您想要的。如果您出于安全原因想要使会话无效,您必须在服务器上使它无效,并且删除 cookie 只是为了方便。