2017-05-09 7 views
0

J'utilise gorilla/sessions pour la gestion de session. Voici mon code pour la session:Déconnexion uniquement si inactif

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 
} 

Je souhaite me déconnecter de l'utilisateur uniquement s'il est inactif pendant 10 minutes. Actuellement, l'utilisateur est déconnecté même s'il travaille.

+0

Que signifie "travailler" pour votre application. Gorilla/Sessions ne semble pas fournir quoi que ce soit pour faire ce que vous demandez hors de la boîte. Peut-être que vous pourriez recréer un cookie, mettre à jour sa date d'expiration, si l'utilisateur que vous voulez garder connecté a envoyé une demande dans les 5 dernières minutes ... –

+0

Travailler signifie que l'utilisateur utilise l'application web. S'il effectue une activité quelconque (comme la visite de menus ou tout autre processus lié à la demande du navigateur), il ne doit pas se déconnecter du système. – Bhavana

+0

Eh bien, soit vous incrémentez ce délai d'expiration de 10 minutes, soit vous implémentez un système pour détecter l'activité de l'utilisateur et mettre à jour la date d'expiration du cookie en fonction de cela. –

Répondre

0

est un exemple de code ici que j'utiliser pour ce faire:

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

J'ai eu une bonne expérience en utilisant https://github.com/alexedwards/scs pour la session de manipulation.

Il comprend également un paramètre pour idle-timeout:

session.IdleTimeout(30*time.Minute) 

Je ne sais pas si le passage de la session bibliothèque est une option pour vous, mais scs intègre assez de façon transparente, il pourrait être intéressant de regarder au moins. :)