2017-03-08 1 views
2

Il s'agit d'une question générale concernant la gestion de session Web. Quelle est l'approche recommandée pour gérer le délai d'attente de session?Quand invalider une session

Supposons un système dans lequel un utilisateur se connecte, une session est créée sur le serveur et un identificateur de jeton est renvoyé au client (via le cookie httpOnly).

Si l'utilisateur tente une vérification basée sur l'accès où la session est validée, il est vraisemblable qu'il est logique de mettre à jour une heure d'expiration de la session dans la base de données. Cela signifie-t-il également que lorsque cela se produit, nous devons mettre à jour l'heure d'expiration sur le cookie de jeton de session pour correspondre? Cela semble être la solution la plus évidente pour moi, mais la réécriture constante du cookie semble être une surcharge de travail. Un aperçu des meilleures pratiques est grandement apprécié. Merci!

Répondre

1

Comment gérer le délai d'attente de session pour garder l'utilisateur connecté, pour éviter qu'il se déconnecte accidentellement?

Pour conserver l'utilisateur connecté, il n'est pas nécessaire de réécrire constamment le cookie. Tout ce que vous devez faire est de faire expirer le cookie de jeton de session comme Session, puis tant que le navigateur est ouvert (le client continue à utiliser votre site), le cookie de jeton de session est valide. Le serveur n'a pas besoin de connaître la durée d'expiration de la session (car il n'y a plus de durée de session prédéfinie expirée), pas mentionne le stocker dans la base de données. Après que l'utilisateur ferme le navigateur, le cookie de jeton de session est effacé et la session est terminée (invalidée).

Normalement, il y aura un paramètre "session timeout" dans le serveur, tel que session-timeout dans Struts2, qui tue la session si le client ne fait aucune demande après un certain temps. Comment faire pour "valider" la session même si l'utilisateur ferme le navigateur?

C'est-à-dire, comment mettre en œuvre la fonctionnalité "Se souvenir de moi pour 1 semaine"?

Pour mettre en œuvre cette fonctionnalité, un nouveau cookie de jeton est utilisé (par exemple RememberMeToken). Lorsque l'utilisateur se connecte avec succès (activer éventuellement la case à cocher "Se souvenir de moi" sur l'interface utilisateur), le serveur génère un jeton aléatoire unique et le stocke dans DB (avec son heure d'expiration pour des raisons de sécurité). Ce temps d'expiration de cookie est assez long (1 semaine par exemple), et sera renvoyé au navigateur avec la réponse de connexion. Lorsque l'utilisateur ferme le navigateur et re-visite le site plus tard (ou l'utilisateur est inactif pendant longtemps et la session est supprimée du côté serveur), le serveur vérifie le cookie de jeton de session et constate qu'il est manquant/invalide. À ce stade, RememberMeToken sera vérifié et comparé avec le jeton stocké dans la base de données, s'il y a correspondance, le serveur effectuera une opération de connexion automatique pour l'utilisateur correspondant, et retournera le cookie de jeton de session généré au navigateur. Tout cela se passe dans le backend, l'utilisateur client ne ressentira rien.

Après 1 semaine depuis que l'utilisateur a activé la case à cocher "Se souvenir de moi" sur l'IU et la connexion, le cookie RememberMeToken a expiré et l'utilisateur doit se reconnecter s'il ouvre le navigateur et visite le site.

+0

Si vous ne stockez pas l'identificateur de jeton de session sur le serveur (votre premier exemple), comment pouvez-vous vérifier qu'il est valide et pas seulement celui que quelqu'un a inventé? – Askanison4

+0

L'identificateur de jeton de session lui-même est stocké sur le serveur (en mémoire ou dans la base de données), mais l'heure d'expiration de l'identificateur de jeton de session n'est pas stockée. – shaochuancs

+0

Ne sera-t-il pas un identifiant de session éternellement valide?Si - d'une manière ou d'une autre - l'identificateur de jeton est récupéré par une tierce partie, ne pourrait-il pas l'utiliser quand il le souhaite? Même après que le cookie de jeton aurait été invalidé? – Askanison4