如何删除HTTP响应中的cookie?

Mik*_*ike 18 cookies http

指示浏览器删除(或不再使用)HTTP响应中为给定域发出的HTTP cookie的首选方法是什么?

(我知道您无法强制浏览器删除cookie,但必须有一种方法可以表明它不再有效且不应再发送)

Bal*_*usC 27

只需将cookie设置为完全相同的名称,路径和域,但Expires过去使用的值.可选地,将值设置为null/empty-string,即使它只是为了节省带宽,否则平均客户端无论如何都会忽略它.

请注意,设置完全相同的路径很重要.许多初学者通过仅使用相同的名称和域并依赖于默认路径的当前请求URL而失败.

来自RFC6265规范:

最后,为了删除cookie,服务器返回一个过去有过期日期的Set-Cookie标头.仅当Set-Cookie标头中的Path和Domain属性与创建cookie时使用的值匹配时,服务器才能成功删除cookie.

使用Max-Age=0也适用于任何符合规范的用户代理,但规范规定服务器"应该"不这样做.根据https://www.rfc-editor.org/errata/eid3430,这显然意味着最大限度地提高与仅支持正值的不合规用户代理的互操作性Max-Age.

  • 对我来说,当我返回`Set-Cookie: token=deleted; 路径=/;expires=Thu, 01 Jan 1970 00:00:00 GMT` 它在 Chrome 中工作,当我返回`Set-Cookie: token=deleted; 路径=/;最大年龄=0;expires=Thu, 01 Jan 1970 00:00:00 GMT` Chrome 似乎忽略了它。因此,Chrome 似乎分享了您对规范的初步解释。 (3认同)
  • @chmike 虽然我也认为这是一个矛盾,但事实并非如此。https://www.rfc-editor.org/errata/eid3430 上的勘误表中考虑了这一点。显然,规范作者的意图是通过为 cookie 服务器应该发出哪些 cookie 指定保守规则和为用户代理必须接受哪些 cookie 指定宽松规则,最大限度地提高与现有的非互操作实现的兼容性。因此,接收`Max-Age=0`的用户代理“必须”删除cookie,但服务器“应该”从不首先发送这样的cookie;符合规范的做法是改用`expires`。 (2认同)