【发布时间】:2015-09-09 10:20:34
【问题描述】:
没有太多的上下文,因为它确实是一种应该起作用的情况,但它就是不起作用。
我正在使用 martini 框架。在一个处理程序中,我正在使用这个:
session.Set("deployed", "true")
r.Redirect("/myOtherURL", http.StatusSeeOther)
其中“会话”是传递给处理程序的会话。会话对象。 在加载 myOtherURL 的处理程序中,我正在使用 session.Get 但没有返回任何内容。我打印了所有会话内容,并且“已部署”不存在。
什么可能导致这个问题?我可能会错过什么?如果可以的话,我会提供更多的背景信息,但它真的就这么简单。
【问题讨论】:
-
您能否发布更多代码:set 和 get 操作的完整处理程序,以及 cookie 存储的设置代码,包括您正在设置的任何选项(安全、HttpOnly)。
-
@elithrar 这很困难,因为我的函数很大。我注意到,当通过 URL 中的路径 /modules 时,会产生第二个 cookie/会话。我可以在谷歌浏览器的开发工具上看到它。我猜这些单独的会话是我的变量不共享的原因。你知道为什么它会产生第二个会话吗?这是以前听说过的吗?关于处理程序/会话,我对此 /modules 路由没有做任何不同的事情,它与其他路由相同,但出于某种随机原因,它会创建一个新会话。
-
你在设置cookie的路径吗?如果没有,它将默认为当前路径 - 例如
/modules。如果另一条路线处于同一级别或以上,则 cookie 将不适用。您需要将session.Options.Path设置为涵盖两者的路径 - 简单的选择是将其设置为/。 -
@elithrar 你是救命稻草,嫁给我
-
可悲的是(对我们俩来说)我被带走了!现在我在为后代/其他 Gophers 使用台式机时,我已将其添加为答案。