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.
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
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
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