Go语言-Cookie无法清除或者覆盖

Python012

Go语言-Cookie无法清除或者覆盖,第1张

Cookie由后端管理。

问题:第一次set cookie可以生效,第二次覆盖或者清除cookie却不生效。查看浏览器的cookie信息,仍然是第一次的值。

cookie := http.Cookie{

                Name:    name,

                Value:    value,

                HttpOnly: true,

                Secure:  false,

                Path:    "/",

        }

        http.SetCookie(resp, &cookie)

原因:在第二次设置cookie,即清除cookie时,没有设置Path

cookie := http.Cookie{

                Name:  name,

                MaxAge: -1,

                Expires: time.Unix(1, 0),

        }

        http.SetCookie(resp, &cookie)

解决方案:

在清除Cookie时,添加Path,并且与第一次设置时的Path值一致。

用GO语言(golang)写了一个简单的Web服务,但是始终无法获取Cookie的值

现象如下:

使用Chrome的开发者工具观察Cookie可以看到设置的Cookie的值

使用r.Cookie(CookieName)无法取得Cookie内容,错误信息:http: named cookie not present

在服务器端打印Requset结构,结果中没有设置的Cookie值

最后Google了一下,在golang-nuts的论坛里找到了解决方法。

根本原因在于GO语言(golang)不能获取值中带有空格的Cookie

而且会将Cookie中的一些特殊字符替换为空格

//src/pkg/net/http.go

func (c *Cookie) String() string {

...

fmt.Fprintf(&b, "%s=%s", sanitizeName(c.Name), sanitizeValue(c.Value))

...

}

...

var cookieValueSanitizer = strings.NewReplacer("\n", " ", "\r", " ", "", " ")

...

func sanitizeValue(v string) string {

return cookieValueSanitizer.Replace(v)

}

俺就是使用了分号。。。

另外讨论中提到的不要使用指针传递http.ResponseWriter的问题,

我试了一下,使用指针传递http.ResponseWriter不会对Cookie的设置和取得产生影响

不过很多函数需要的都是http.ResponseWriter的对象,如果传指针,很多地方要写*http.ResponseWriter着实也挺麻烦

网页cookie查询方法如下:

1、打开浏览器,可以使用电脑自带的浏览器合下载的其它浏览器。

2、打开浏览器之后,在出现的网页里点击键盘中的f12键。

3、点击f12键之后,会弹出一个控制台。

4、在控制台的中,找到上面的网络Internet选项并点击它。

5、点击网络后会弹出内容类型的下拉列表,在这个下拉列表中找到文档,并将文档的前面空格勾选起来。

6、点击内容类型中的文档之后,刷新页面,再点击任意详细的文档信息记录,我们就可以看到右侧显示网页的cookies了。