Выйти только в случае простоя

Я использую гориллы / сессий для обработки сессий. Ниже мой код для сессии:

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 ответа

У меня был хороший опыт использования https://github.com/alexedwards/scs для обработки сессий.

Он также включает настройку для простоя:

session.IdleTimeout(30*time.Minute)

Я не знаю, является ли переключение библиотеки сессий вариантом для вас, но scs интегрируется довольно легко, так что, возможно, стоит хотя бы взглянуть на это.:)

Вот пример кода, который я использую для этого:

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()
        }
    }
}
Другие вопросы по тегам