大猩猩cookie会话是否可以持续进行服务器重建?

时间:2018-07-25 17:33:35

标签: go gorilla

我正在使用以下代码在整个软件包中传递当前会话。我用新鲜的建筑来监视我的文件。似乎在构建后,cookie不再有效?我已经尝试了一个cookie存储和一个mysql存储。我已经确认Cookie仍在浏览器中,并且订单项仍在数据库中。

cfg.CreateMap<ModelB, ModelA>()

1 个答案:

答案 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
}

然后我认为一切都会按预期进行。