Comment pourrais-je utiliser AJAX pour déterminer si la session de l'utilisateur a expiré, puis la renvoyer à la page de connexion?

StackOverflow https://stackoverflow.com/questions/1638171

Question

Dans le scénario suivant, comment utiliser AJAX pour vérifier si la session est toujours active, puis renvoyer l'utilisateur à la page de connexion?

  1. L'utilisateur se connecte et commence à travailler
  2. L'utilisateur disparaît pendant 10 minutes et la session expire
  3. l'utilisateur retourne sur son ordinateur et est toujours sur l'écran qu'ils étaient il y a 10 minutes
  4. L'utilisateur soumet son travail, mais revenir à l'écran de connexion (par ma vérification d’état de session existante) et les modifications ne sont pas persistées

Idéalement, je cherche un moyen de vérifier l'état de la session toutes les minutes pour voir si l'utilisateur est inactif. S'ils sont inactifs et que la session est sur le point d'expirer, je conserverai temporairement leurs modifications, puis, lorsque la session expirera, changera automatiquement la page en écran de connexion avant que l'utilisateur ne retourne inactif.

Est-il également possible de faire cela sans utiliser setTimeOut ()?

Était-ce utile?

La solution

La plupart si cela peut être géré côté serveur.

Chaque fois qu'il y a une activité utilisateur côté serveur - chargement de page, appel ajax, peu importe, définition d'une variable de session

Session["last_activty"]=DateTime.Now;

Dans vos appels AJAX et chargement de page (vous pouvez le faire dans une page maître / une page maître imbriquée pour les pages nécessitant une authentification), cochez (pseudocode)

if (DateTime.Now-DateTime.Parse(Session["last_activity"]) > 10 minutes)
  Session["logged_in"]=false;

Si le chargement de la page ou la méthode webmethod / webservice détermine, en fonction de ce qui précède, que l'utilisateur a dépassé son délai d'attente,

a) redirigez vers la page de connexion (côté serveur) ou

b) renvoyez un code d'état à votre appelant ajax, ce qui provoquera une redirection ou l'affichage d'un dialogue de connexion.

REMARQUE : méfiez-vous des variables de session réelles, car elles ont tendance à ne pas bien fonctionner / ne fonctionnent pas du tout dans les environnements de serveurs en cluster. Votre base de données constitue un meilleur endroit pour ce genre de chose.

table Users
.ID
.last_activity datetime
.logged_in - calculated column which returns if GetDate()-LastActivity > 10 minutes.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top