【问题标题】:Logout only if idle仅在空闲时注销
【发布时间】:2017-08-04 23:40:33
【问题描述】:

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

【问题讨论】:

  • “工作”对您的应用程序意味着什么。 Gorilla/Sessions 似乎没有提供任何开箱即用的功能。如果您要保持登录状态的用户在过去 5 分钟内发送了请求,也许您可​​以重新创建一个 cookie,更新其到期日期...
  • 工作意味着用户正在使用网络应用程序。如果他正在执行任何活动(例如访问菜单或与浏览器请求相关的任何后端进程),那么他不应退出系统。
  • 好吧,要么增加 10 分钟的过期超时,要么实现一个系统来检测用户活动并根据它更新 cookie 过期日期。
  • 好的.. 谢谢!

标签: session go gorilla


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    它还包括一个空闲超时设置:

    session.IdleTimeout(30*time.Minute)
    

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

    【讨论】:

      猜你喜欢
      • 2019-07-02
      • 1970-01-01
      • 2013-01-12
      • 2011-10-14
      • 2022-08-15
      • 2019-12-27
      • 1970-01-01
      • 2014-12-08
      • 2019-03-17
      相关资源
      最近更新 更多