gpt4 book ai didi

go - 删除所有 cookies

转载 作者:行者123 更新时间:2023-12-01 22:00:31 24 4
gpt4 key购买 nike

我很难使用以下代码删除所有cookie。似乎发生的情况是,更改了域以在其前面附加一个点。我没有删除所有cookie,而是获得了域稍有不同的重复cookie。有什么方法可以完全删除所有Cookie,无论其域名是什么样子?
谢谢你的帮助!

//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)
}
}

最佳答案

您尝试执行的操作无法正常运行,因为Cookie无法正常运行。
首先简单的事情:
HttpOnly,Domain和Secure:这些值在HTTP客户端请求中传输的是而不是,这些c的字段将始终为空。客户端使用这些字段来确定是否在Cookie header 中发送(名称,值)对,但不发送这些值。
对于HttpOnly,Secure(和SameSite),这无关紧要,因为这些(以及MaxAge和Expires)对cookie身份所做的贡献不是而不是
Cookie身份基于SetCookie header 中发送的三元组(域,路径,名称)。通常,Domain和Path是隐式的,但是它们在客户端上确实具有定义的值。
现在,要删除具有标识(域X,路径X,名称X)的cookie,您必须发送具有相同标识(域X,路径X,名称X)且MaxAge = -1的cookie。但是如上所述,您收到的Cookie不包含域和路径。
有两种解决方法:

  • 您必须知道cookie是域cookie还是主机cookie,以及它们的设置路径,并使用该信息将其删除。 (我会推荐这个。)
  • 删除所有可能的cookie。根据路径/foo/bar/wuz的请求,来自客户端的cookie可能源自路径//foo/foo/bar(如果我没有记错的话,请在RFC 6265中进行测试并进行查找)。因此,为所有这些路径删除名称为“Name-X”的cookie。对Domain属性执行相同的操作,不幸的是,此操作更为复杂。删除主机cookie(Domain ==“”)并删除域cookie(Domain!=“”)。确保获得正确的域名(有效的TLD加一个)。

  • 如您所见2非常复杂。但这就是cookie的设计方式:服务器应知道服务器设置的cookie,即服务器应知道其所有cookie的cookie标识(Domain,Path,Name)。客户的责任是仅针对特定请求发回适当的(名称,值)对。如果服务器希望删除cookie,则只需将该cookie的MaxAge设置为-1。请注意,“那个cookie”是服务器希望知道的,而不是从客户端请求中推断出来的。

    关于go - 删除所有 cookies ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63803734/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com