仅在空闲

时间:2017-05-09 06:30:24

标签: session go gorilla

我正在使用gorilla/sessions进行会话处理。以下是我的会话代码:

var STORE = sessions.NewCookieStore([]byte("some_secret_text"))

session, err := STORE.Get(c.Request, "user")
if err != nil {
    fmt.Println("Error: ",err)
}
if session.IsNew {
   session.Options.MaxAge = 10 * 60
}

我想在他闲置10分钟时才注销用户。 目前用户即使在工作也会被注销。

2 个答案:

答案 0 :(得分:0)

以下是我用来执行此操作的示例代码:

func SessionHandler(ses sessions.Session, timeout int64) {
    timeNow := time.Now().Unix()

    if ses.Get("authenticated").(bool) {
        switch ses.Get("timestamp").(type) {
        case int64:
            sessiontime := ses.Get("timestamp").(int64)

            if sessiontime > 0 {
                if timeNow > (sessiontime + timeout) {
                    ses.Clear()
                    ses.Save()
                    return
                }

                ses.Set("timestamp", timeNow)
                ses.Save()
            }
        default:
            ses.Set("timestamp", timeNow)
            ses.Save()
        }
    }
}

答案 1 :(得分:0)

我在使用https://github.com/alexedwards/scs进行会话处理方面有一些很好的经验。

它还包括idle-timeout的设置:

session.IdleTimeout(30*time.Minute)

我不知道是否可以选择切换会话库,但scs可以无缝集成,所以至少可能值得一看。 :)