Session 仅在空闲时注销

Session 仅在空闲时注销,session,go,gorilla,Session,Go,Gorilla,我使用的是会话处理。下面是我的会话代码: 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分钟

我使用的是会话处理。下面是我的会话代码:

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分钟时注销他。
当前用户即使正在工作也会注销。

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

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()
        }
    }
}

我有一些很好的会话处理经验

它还包括空闲超时设置:

session.IdleTimeout(30*time.Minute)

我不知道切换会话库是否适合您,但scs集成非常无缝,因此至少值得一看。:)

“工作”对你的申请意味着什么。Gorilla/Sessions似乎没有提供任何东西来满足你开箱即用的要求。也许你可以重新创建一个cookie,更新它的过期日期,如果你想保持登录的用户在过去5分钟内发送了一个请求…工作意味着用户正在使用web应用程序。如果他正在执行任何活动(如访问菜单或与浏览器请求相关的任何后端进程),则他不应注销系统。您可以增加10分钟的过期超时时间,或者实现一个系统来检测用户活动并基于此更新cookie过期日期。请参阅“确定”。。谢谢