【问题标题】:Not able to read JSON cookie无法读取 JSON cookie
【发布时间】:2019-09-25 15:02:01
【问题描述】:

我有一种情况,我想在 Go 中读取 cookie 的内容。但是 cookie 的内容是 JSON 格式。 (不能更改 cookie 的格式)

例如 cookie 的内容可能是:

{"id":"abc","data":"information","on_off":false}

在 JavaScript 中,我可以轻松读取 cookie 的内容并对其进行解析。

另一方面,使用 Go,当我尝试使用 r.Cookie('my_cookie') 读取 cookie 时,我收到以下错误:http: named cookie not present

如果我将 cookie 修改为一个简单的字符串,那么它会按预期工作。

有谁知道在这种情况下该怎么办?在 Go 中是无法读取这样的 cookie 吗?

当我使用r.Header.Get["Cookie"] 时,它返回的输出确实包含 cookie 及其 JSON 值(列在所有其他 cookie 中)

【问题讨论】:

  • 您不能将 JSON 直接存储在 cookie 值中。 cookie 中不允许使用 JSON 中使用的大多数字符。
  • 拜托,你能添加你正在使用的框架/库吗?您是在发出请求还是从网络服务器接收请求?
  • @alessiosavi - 我收到了一个请求,这是一个直接的 go 设置导入 "net/url"
  • @CeriseLimón 当我得到`r.Header.Get["Cookie"]`的值时。我可以在输出中看到包含所有其他 cookie 数据的 cookie(及其值)。

标签: go cookies


【解决方案1】:

JSON 使用许多 characters not permitted in HTTP cookie values per the RFC - 例如,不允许使用双引号、逗号和空格字符。通过 cookie 传输 JSON 数据的最简单方法可能是在设置 cookie 时对其进行 Base64 编码,并在读取 cookie 时对其进行 Base64 解码,使用 encoding/base64 包。

【讨论】:

  • 感谢您的回答。如果不允许使用这些字符,那么 cookie 是如何存在的?
  • 这是一个复杂的问题 - 不要迂腐,但这取决于您在这里所说的“存在”是什么意思。 cookie 只是在 Cookie 和 Set-Cookie 标头中来回传递的值。那里只允许使用某些字符。客户端或服务器可以发送无效的标头(包含无效字符),而另一方可能会也可能不会接受它。但根据标准,JSON 通常不会生成有效的 cookie 值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 2019-04-24
  • 2019-06-29
  • 2015-10-18
  • 2018-12-05
相关资源
最近更新 更多