服务器和客户端在不同的时区。相差6小时。服务器设置一个 cookie 1 小时,但客户端正确接收并保留一个小时,尽管客户端当前是 5 小时前。客户端如何在整点正确设置 cookie?浏览器可能会查看标题“日期”吗?如果是这样,如果服务器将在另一个代理服务器后面,它将设置自己的“日期” header 怎么办?
必须提供对 rfc 或其他内容的引用的证明。
最佳答案
有两种方法可以指定 cookie 的最长期限:
- Expires 属性:https://www.rfc-editor.org/rfc/rfc6265#section-5.2.1
- Max-Age 属性:https://www.rfc-editor.org/rfc/rfc6265#section-5.2.2
Max-Age是相对于setting的时间..所以Texpiration = Tsetting + Max-Age
否则,Expires 属性会设置一个包含时区的日期/时间值: https://www.rfc-editor.org/rfc/rfc6265#section-5.1.1
来自 RFC 本身的示例:
Expires=Wed, 09 Jun 2021 10:18:14 GMT
有许多标准(旧的和新的)支持 GMT (UTC) 作为日期/时间格式:
- https://www.rfc-editor.org/rfc/rfc7231#section-7.1.1.1
- https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html
来自 RFC2616我们得到了所谓的 HTTP 格式:
All HTTP date/time stamps MUST be represented in Greenwich Mean Time (GMT), without exception. For the purposes of HTTP, GMT is exactly equal to UTC (Coordinated Universal Time).
Expires 属性还应该设置 time in HTTP format :
例如设置 Cookie:reg_fb_gate=deleted;过期=星期四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域名=.example.com; HttpOnly
(来自Wikipedia)
关于http - 浏览器如何在服务器端和客户端正确计算具有不同时区的 cookie 的到期日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35729242/