首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除所有cookie

删除所有cookie
EN

Stack Overflow用户
提问于 2020-09-09 01:58:40
回答 1查看 218关注 0票数 0

我很难用下面的代码删除所有cookie。所发生的事情似乎是,域被改变,以附加一个点在它前面。而不是删除所有cookie,我得到的重复cookie与略有不同的领域。有没有任何方法可以完全删除所有的cookie,无论它们的域名是什么样子?

谢谢你的帮助!

代码语言:javascript
运行
复制
//DeleteCookies deletes all cookies
func DeleteCookies(w http.ResponseWriter, r *http.Request) {
    for _, c := range r.Cookies() {
        deleted := &http.Cookie{
        Name: c.Name,
        Path: c.Path,
        //Expires:  time.Unix(0, 0),
        MaxAge:   -10,
        HttpOnly: c.HttpOnly,
        Domain:   c.Domain,
        Secure:   c.Secure,
        Value:    "",
        }
        http.SetCookie(w, deleted)
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-09 05:20:49

你想要做的事情不能很好的发挥作用,因为cookies不是这样工作的。

首先简单的事情是: HttpOnly、Domain :这些值是而不是在HTTP请求中传输的,这些c字段将始终是空的。客户端使用这些字段来确定是否在Cookie头中发送(名称,值)Cookie,但不发送这些值。

对于HttpOnly来说,安全(和SameSite)并不重要,因为这些(和MaxAge以及过期的)做而不是贡献给cookie标识。

Cookie标识基于在SetCookie头中发送的三重(域、路径、名称)。域和路径通常是隐式的,但它们确实在客户端上定义了值。

现在,要删除带有标识的cookie (Domain-X、Path-X、Name-X),您必须发送具有相同标识的cookie (Domain-X、Path-X、Name-X)和MaxAge=-1。但是如上所述,您收到的cookie不包含域和路径。

有两条出路:

  1. 您必须知道您的cookie是域还是宿主cookie,以及它们设置的路径,并使用这些信息删除它们。(我建议这样做。)

  1. 删除所有可能的饼干。当请求路径/foo/bar/wuz时,来自客户端的cookie可能来自path //foo/foo/bar (如果我没有记错,请在RFC 6265中进行测试和查找)。因此,删除所有这些路径的名称为" name -X“的cookie。对于域属性也是这样做的,遗憾的是,这个属性更复杂。删除主机cookie (Domain=="")并删除域cookie(域!=“”)。确保获得正确的域名(有效的TLD +1).

如你所见,2是相当复杂的。但是cookie就是这样设计的:服务器应该知道服务器设置了哪些cookie,即服务器应该知道所有cookie的cookie标识(域、路径、名称)。客户端的职责是只为某个请求发送适当的(名称、值)对。如果服务器希望删除cookie,它只是将该cookie的MaxAge设置为-1。请注意,“那个cookie”是服务器应该知道的,而不是从客户端请求中推断出来的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63803734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档