当我们已经有“Expires”时,为什么还要为 cookie 引入“Max-Age”?

问题描述 投票:0回答:2

Cookie 有两个属性(

Max-Age
Expires
),它们似乎具有相同的用途,即指定给定 Cookie 何时过期。

根据MDN

Expires

以 HTTP 日期时间戳的形式指示 cookie 的最大生命周期。请参阅日期了解所需的格式。

Max-Age

表示 cookie 过期之前的秒数。零或负数将使 cookie 立即过期。如果同时设置了 Expires 和 Max-Age,则 Max-Age 优先。

对我来说,这听起来像是它们完全是同义词,唯一的区别是到期日期的表达格式;其中

Expires
指定实际日期时间,
Max-Age
指定时间跨度。

看起来

Expires
实际上早于
Max-Age
,并且
Max-Age
的引入要晚得多,但为什么呢?这就是我的问题。
Expires
有什么缺点需要
Max-Age
去改正?什么时候应该优先选择其中之一?如果
Max-Age
唯一不同的是 如何 表达有效期,那么它的介绍似乎毫无意义,不是吗?

令我惊讶的是,我实际上找不到任何相关信息,似乎我是唯一一个对此打问号的人,我觉得这很奇怪,所以请告诉我是否遗漏了什么。

请注意,我的问题并不是严格意义上的两个属性之间的技术差异(已经有像this这样的问题涵盖了这一点),我特别好奇原因以及引入

背后的动机Max-Age
,当
Expires
已经存在并且基本上做了同样的事情。

http cookies
2个回答
1
投票

我认为使用

Max-Age
更好。想想当前端和后端以某种方式(意外地)使用不同的时区时会发生什么。在我看来,它不太容易出错,但为了向后兼容,您也应该设置
Expires
属性。另外,如果代码中的某些逻辑依赖于 cookie 的过期时间,那么您应该明确使用
Expires


0
投票

可能,因为即使用户(客户端)系统时间不正确,

Max-Age
的工作也大致正确。例如,如果服务器时间为 13:00 PM (UTC),而用户的系统时间错误为 15:00 PM (UTC),则设置为(服务器端)的 cookie 在 14:00 PM 过期(UTC)(使用
Expires=...
)将在客户端立即过期!但通过设置
Max-Age=7200
(2 小时),它将工作大约 2 小时(直到用户系统时钟的 17:00 PM (UTC))。

请注意,不同时区并不意味着不同时间。例如,

13:00 UTC
14:00 UTC+01
相同)。但
13:00 UTC
13:00 UTC+01:00
不同!

© www.soinside.com 2019 - 2024. All rights reserved.