我正在使用以下代码在整个软件包中传递当前会话。我用新鲜的建筑来监视我的文件。似乎在构建后,cookie不再有效?我已经尝试了一个cookie存储和一个mysql存储。我已经确认Cookie仍在浏览器中,并且订单项仍在数据库中。
cfg.CreateMap<ModelB, ModelA>()
答案 0 :(得分:0)
问题很可能是您在“共享”会话。一个会话应该属于一个请求。但是当您这样做时:
var sessionPointer *sessions.Session;
func initSession(r *http.Request) *sessions.Session {
if sessionPointer == nil {
} else{
return sessionPointer;
}
temp, err := sessionStore.Get(r,os.Getenv("SESSION_NAME"))
sessionPointer = temp;
// ...
}
您实际上是在说“如果创建了 any 会话,请返回它”。这意味着每个请求(和每个用户)将获得相同的会话。我不确定他们如何将请求匹配到特定的会话,但是我可以想象每次将它与新请求匹配时都不会调用sessionStore.Get
,最终会在会话中设置某些内容,从而使该请求不再有效(因为该会话实际上并不属于该请求)。
好消息是没有理由缓存sessionPointer。无论如何,它内部都在使用地图,并且查找基本上是免费的。我会将您的代码更改为:
func initSession(r *http.Request) *sessions.Session {
temp, err := sessionStore.Get(r,os.Getenv("SESSION_NAME"))
if err != nil {
panic(err)
}
sessionPointer.Options = &sessions.Options{
Path: "/",
MaxAge: 86400 * 1,
HttpOnly: false,
}
return sessionPointer
}
然后我认为一切都会按预期进行。