Closed Nyx2022 closed 10 months ago
为什么项目重启之后cookiejar中还会有之前残留的cookie呢
项目重启残留cookie是指什么?如果是程序重启,内存没数据了,不可能残留。
如果有coookie,就在后面添加,如果没有才set。
这个是标准库的 Request.AddCookie
实现,就是给request追加cookie(无论有没有设置Cookie头),你可以仔细看代码。
我后来发现应该是clone的问题,应该是克隆之后的cookiejar和原本的共用了一个cookiejar,导致cookie混用
我后来发现应该是clone的问题,应该是克隆之后的cookiejar和原本的共用了一个cookiejar,导致cookie混用
clone 目前是会共用 cookiejar 的,除非显式调用 client.ClearCookies
,不过原则上应该新建一个cookiejar,计划下个版本clone用新建的cookiejar
OK,我先自己设置一个新的cookiajr,坐等下一版本更新。同时建议作者把不能共用的再下一个版本中都给改成独立的,谢谢
在3.40.1中我使用SetCommonCookies给iclient设置了一些cookie,但是在我使用client.R()获取request中间件欧却得到了一堆和原来完全不一样的cookie,我跟了一下代码,应该在调用go1.20.7.windows-amd64/go/src/net/http/cookiejar/jar.go:175的地方的时候![image](https://github.com/imroc/req/assets/51039208/fd3b9e0d-c453-4432-b96e-0eb5bff10133)
其中有一个entries map,因为不方便截内容,但是我看了里面保存的值还是我使用SetCommonCookies更新之前的一些值(比如存在一个key phpsessionid),然后到了github.com/imroc/req/v3@v3.40.1/transport.go:867中的时候就会把SetCommonCookies中appen的cookies来处理,调用了AddCookie,但是AddCookie方法中的逻辑是
如果有coookie,就在后面添加,如果没有才set。
所以,我很好奇,为什么项目重启之后cookiejar中还会有之前残留的cookie呢,以及req在初始化的时候能把之前的残留给删掉吗?当然我自己在初始化之后重新设置一个空cookiejar应该也可以解决,这里就和作者讨论一下golang中的奇怪现象以及希望能够遭到更适当的理解或实现