2017-09-28 13 views
0

Lorsque je me déconnecte en utilisant le bouton, je mets à jour un attribut (isActive) dans la table User. Tout fonctionne, sauf quand la fin de vie. Pourquoi?Après LifeTime - Session.php Déconnexion automatique

L'utilisation de ces données est strictement informative. Donc, un développement simple va plus que bien.

Merci

session.php

/* 
|-------------------------------------------------------------------------- 
| Session Lifetime 
|-------------------------------------------------------------------------- 
| 
| Here you may specify the number of minutes that you wish the session 
| to be allowed to remain idle before it expires. If you want them 
| to immediately expire on the browser closing, set that option. 
| 
*/ 

'lifetime' => 120, 

'expire_on_close' => false, 

AuthenticateUsers.php

public function logout(Request $request) 
{ 
    User::where('id', Auth::user()->id)->update(['isActive' => '0']); 

    $this->guard()->logout(); 

    $request->session()->invalidate(); 

    return redirect('/login'); 
} 

Répondre

1

Je n'ai pas vraiment votre question mais voici mon essai pour vous donner des indices sur ce qui se passe. Ce que vous devez comprendre Je pense que quand le temps de vie est passé, le client peut ne plus être sur votre site Web depuis longtemps pour que rien de spécial ne se produise. Aucune action ne sera effectuée sur le client et aucune action ne sera effectuée sur le serveur. Simplement parce qu'il n'y a aucun moyen de détecter et pas (simple) moyen d'exécuter du code sans une requête associée. La seule chose qui arrive est que lors de la prochaine requête avec ce cookie, ce qui peut arriver ou non, laravel détectera que la durée de vie passée et considérera le cookie comme invalide (et considérera la demande associée comme non-logguée demande)

Votre route de déconnexion est appelée lorsque l'utilisateur demande spécifiquement une déconnexion. Il ne sera pas appelé par magie lorsqu'une session est invalidée car Laravel ne détecte pas l'invalidation de la session sans avoir reçu une requête de cette session. Laravel (et si) une invalidation est détectée, laravel ne va pas appeler la route de déconnexion car l'utilisateur sera déjà déconnecté (la session est invalide, donc les données ne peuvent pas être approuvées et utilisées).

Comment faire ce que vous voulez est de stocker la dernière action de l'utilisateur (c'est-à-dire, le mettre à jour chaque fois qu'il fait une demande) et considérer comme inactif tout utilisateur où la dernière action est il ya plus de X min. Méfiez-vous que c'est très peu fiable, mais c'est une très bonne estimation.

Si vous voulez vraiment une sorte de méthode fiable, jetez un oeil à cette question: Detect user exit site mais s'il vous plaît noter que les utilisateurs de sondage auront périodiquement un coût de performance très élevé pour vos serveurs.

+0

Merci beaucoup, bonne explication! Désolé pour mon anglais ... –

0

Qu'est-ce exactement échoue? La table users n'est-elle pas mise à jour à l'expiration de la session à vie? En effet, cela se produit automatiquement en définissant la durée de vie du cookie de session. Lorsque le cookie expire, cela n'appelle pas l'itinéraire logout dans votre application et ne met pas à jour la table users. Je pense que la seule façon d'y parvenir est de régler la durée de vie à un très grand nombre de minutes (par exemple 99999999 =>190 years) et de "forcer" l'utilisateur à appuyer sur le bouton de déconnexion. Mais un utilisateur peut tout simplement fermer la fenêtre du navigateur et quitter votre application sans se déconnecter.

+0

Bonne solution .... Je dois comprendre si cela en vaut la peine ou étudier une autre solution! Merci! –