我正在尝试为 API 制作一个 CLI 客户端。一旦用户登录到 API(通过 CLI 上的登录命令),API 就会创建一个会话并发出一个具有 Max-Age/Expiry 的 cookie。
在客户端中,理想情况下,我希望获取此 cookie,将其保存到磁盘并在其未过期时使用它。我使用 net/http/cookiejar 和https://github.com/nhatthm/go-cookiejar进行持久化。但现在我感觉有点卡住了,因为 Jar 中的所有 cookie 的到期时间为 0001-01-01 00:00:00 +0000 UTC 或最大年龄为 0。即使持久文件显示了 Expires 条目。
我尝试在发出请求后立即检查 cookie,以查看问题是否出在第三方库中,但 jar 也没有存储有关 Cookie 到期的任何信息,而且我还得到了 0001-01-01 00:00:00 +0000 UTC。
上述测试的示例代码:
func (c *Client) SetupJar() {
jar, err := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List})
if err != nil {
log.Panic(err)
}
c.Http.Jar = jar
}
func (c *Client) foo() {
fmt.Println("Cookies before request")
for _, c := range c.Http.Jar.Cookies(u) {
fmt.Println(c, c.Expires, c.Path)
}
// Request done here
fmt.Println("Cookies after request")
for _, c := range c.Http.Jar.Cookies(u) {
fmt.Println(c, c.Expires, c.Path)
}
}
输出:
Cookies before request
Cookies after request
session=MJe4jKguS4TWcafwbDauJxsVdN4DibnHVknddXzOyGU.bc6dO7-zrhWfv4yl2SXSE0KaKtQ 0001-01-01 00:00:00 +0000 UTC
即使 c.Path 是空的
持久文件(如果使用第三方库运行)包含所有内容:
{
"localhost": {
"localhost;/;session": {
"Name": "session",
"Value": "MJe4jKguS4TWcafwbDauJxsVdN4DibnHVknddXzOyGU.bc6dO7-zrhWfv4yl2SXSE0KaKtQ",
"Quoted": false,
"Domain": "localhost",
"Path": "/",
"SameSite": "",
"Secure": false,
"HttpOnly": true,
"Persistent": true,
"HostOnly": true,
"Expires": "2024-10-11T15:53:14Z",
"Creation": "2024-10-11T16:52:45.000924497+01:00",
"LastAccess": "2024-10-11T16:52:45.000924497+01:00",
"SeqNum": 0
}
}
}
我在这里遗漏了什么?