Sessions: securecookie:该值无效

创建于 2013-10-13  ·  9评论  ·  资料来源: gorilla/sessions

你好,
尝试根据来自 websocket.Conn.Request() 的请求调用 store.Get() 时出现此错误

session, err := store.Get(conn.Request(), "my_session")

该错误源自gorilla/securecookie 的verifyMac 功能。

最有用的评论

您不应将密钥/凭据嵌入到您的源代码中。 相反,您应该通过环境传递它们 - 例如os.Getenv("APPNAME_SESSION_KEY") 。 该环境可能由您的部署系统引导 - 在 k8s 情况下,使用 Secrets 功能: https: //kubernetes.io/docs/concepts/configuration/secret/#using -secrets-as-environment-variables

所有9条评论

你是怎么解决的? :)

我也看到了这个,很想知道如何清除/解决它。

错误行为是否一致? 还是只影响某些请求?

2015 年 6 月 18 日星期四下午 2:04 Dominic Hamon通知@ github.com
写道:

我也看到了这个,很想知道如何清除/解决它。


直接回复此邮件或在 GitHub 上查看
https://github.com/gorilla/sessions/issues/16#issuecomment -113047123。

我能够通过在遇到错误(而不是 500)时返回有效页面然后从浏览器中手动删除 cookie 来缓解这种情况。 我认为这是由于我更新了身份验证/加密密钥但在浏览器端有一个来自现有会话的 cookie。

我不知道从长远来看缓解这种情况的正确方法是什么,因此欢迎提出任何建议。

如果您想避免这种情况,您需要一种应用程序迁移密钥的方法。

我也遇到了这个问题。 我最终忽略了这个错误,因为gorilla/sessions 文档说仍然返回一个新的会话。 您仍然可以调用session.Save() ,之后请求浏览器将拥有一个新的、有效的会话 cookie。

我面临着同样的问题,一开始有点难以发现,问题是我有
var store = sessions.NewCookieStore(securecookie.GenerateRandomKey(10))
所以每次我重新启动服务器时,都会为商店生成一个新密钥,如果您之前已将 cookie 保存到 Web 浏览器中,那么在尝试解码 cookie 时会导致错误,因为它使用的是新密钥和不是最初创建 cookie 时的关键。
在部署到 kubernetes 时,这可能是一个难以发现的问题,甚至是最糟糕的问题,因为有时一个节点(机器)需要重新启动,该节点将生成自己的密钥,这可能会导致与其他节点发生冲突。 我建议不要生成随机密钥,而是手动插入密钥,这样您就不会遇到该问题,例如:
var store = sessions.NewCookieStore([]byte("asdaskdhasdhgsajdgasdsadksakdhasidoajsdousahdopj"))

您不应将密钥/凭据嵌入到您的源代码中。 相反,您应该通过环境传递它们 - 例如os.Getenv("APPNAME_SESSION_KEY") 。 该环境可能由您的部署系统引导 - 在 k8s 情况下,使用 Secrets 功能: https: //kubernetes.io/docs/concepts/configuration/secret/#using -secrets-as-environment-variables

我也受到了很长的 keycloak 令牌的影响。

此页面是否有帮助?
0 / 5 - 0 等级