web-dev-qa-db-fra.com

Meilleures pratiques pour avertir de l'expiration de la session

Notre application a une session expirant automatiquement de 30 minutes - la session est renouvelée sur la communication du serveur.

Quelle est la meilleure façon de communiquer une session expirant à l'utilisateur? Ma pensée initiale est d'afficher un avertissement modal peu de temps avant l'expiration avec "votre session est sur le point d'expirer [continuer]" (meilleure formulation? ) qui permet à l'utilisateur de continuer (communiquer en arrière-plan pour renouveler la session).

  • Est-il jamais approprié d'afficher un temporisateur de session à l'utilisateur?
  • Est-il jamais approprié de mettre fin à une session sans que l'utilisateur ait la possibilité de la prolonger?
  • Les utilisateurs doivent-ils savoir quand la session expirera tant qu'ils auront la possibilité de la prolonger?
32
Luke Charde

Je crois qu'un temps d'arrêt de session tombe dans la catégorie des "réponses chronométrées". Pour répondre à l'accessibilité alors, l'utilisateur devrait avoir la possibilité de prolonger, ou au moins, être averti que cela se produit.

La notification de la durée de la session à l'utilisateur n'est pas obligatoire, bien qu'elle doive être déterminée "par application". Par exemple, s'il s'agit d'une application dans laquelle l'utilisateur crée/modifie des données complexes, ou toute autre chose complexe/longue - leur offrir la possibilité de s'étendre pendant qu'ils fouillent leurs notes pourrait être une "fonctionnalité" importante.

13
Susan R

La première chose à comprendre est que les utilisateurs ne se soucient pas des sessions, la session est quelque chose que vous, en tant que développeur, obligez l'utilisateur à répondre à vos besoins de sécurité/application. Dans un monde idéal, la session n'expirerait jamais, comme Facebook, Hotmail, etc.

Cela dit, dans certaines situations telles que les sites bancaires, nous devons encore expirer les sessions car nous ne voulons pas laisser la porte ouverte à quiconque de voler notre argent lorsque nous allons aux toilettes ou quelque chose du genre.

Ok, alors quand nous devons expirer une session, devons-nous avertir l'utilisateur et lui donner la possibilité de l'étendre?

Eh bien, l'expiration d'une session est utilisée pour déconnecter l'utilisateur lorsqu'il n'utilise pas le site/l'application pour sécuriser les données. Logiquement, si l'utilisateur utilise toujours le site, sa session ne doit pas expirer. Par conséquent, avertir l'utilisateur de l'expiration imminente de la session devient non pertinent, c'est-à-dire que si l'utilisateur utilise le site, il ne devrait jamais le voir ET si l'utilisateur n'utilise pas le site, il ne le verra jamais.

Si vous devez avoir des sessions qui expirent, concentrez vos efforts sur l'enregistrement des activités des utilisateurs afin que les sessions n'expirent pas pour les utilisateurs actifs.

MODIFIER: Par exemple. Pour notre application Web, j'ai développé un moteur JavaScript qui capture les interactions utilisateur côté client, telles que la touche enfoncée, le déplacement de la souris, les clics de souris, le défilement, etc. Lorsqu'un événement utilisateur est déclenché, une demande ajax est envoyée pour maintenir la session en vie.

Pour éviter de nombreux appels ajax vers le serveur à chaque fois qu'un utilisateur déplace sa souris, vous pouvez définir le JavaScript pour n'envoyer une demande ajax qu'une fois toutes les 5 minutes environ. c'est-à-dire If dernier temps d'interaction avec l'utilisateur > supérieur à 5 minutes Then envoyer une requête ajax pour maintenir la session en vie.

18
ArchieVersace

Vous pouvez toujours trouver un scénario dans lequel cet avertissement passerait inaperçu - pensez à la pause déjeuner ou à une réunion urgente. J'essaierais donc dans un premier temps de rendre l'existence de ces sessions aussi transparente pour mon utilisateur que possible:

  • réinitialiser le chronomètre de session aussi souvent que possible (par exemple chaque fois qu'une activité est détectée) pour minimiser l'occurrence des délais d'attente
  • si la session a expiré et que tout ce que l'utilisateur a fait peut être restauré directement sur place, ouvrez silencieusement une nouvelle session et réinsérez ces données - donnez l'impression que la session n'a jamais expiré en premier lieu
  • si la session a expiré et que certaines données ne peuvent pas être restaurées sur place, essayez de les rendre disponibles par d'autres moyens (par exemple, un bloc de texte ou un fichier pour copier-coller les données)
  • si la session a expiré et que certaines données sont perdues, excusez-vous abondamment.
12
Jan

Mint.com ' s est une approche très agréable:

enter image description here

Je déconseille également fortement les boîtes de message de style alert() pour avertir l'utilisateur de sa session expirée (certains sites Web le font). Vous ne pouvez pas l'annuler, donc si l'utilisateur est parti pour le déjeuner, il reviendra à la boîte de message, cliquez sur "OK" pour enregistrer sa session, puis se verra de toute façon déconnecté. Les boîtes de messages ne sont pas non plus très bien réparties sur plusieurs onglets.

12
Phil Cohen

Au lieu d'appels jquery/ajax pour maintenir la session active, vous pouvez envisager d'utiliser le minuteur setInterval javascript pour actualiser une petite image d'espacement 1x1 lorsque la session est sur le point d'expirer conditionnellement ou toujours sans aucun impact sur les performances.

1
Manu

J'aimerais suggérer que vous ne le faites pas.

Cela dépend de l'application, bien sûr, mais un grand nombre de ces sites qui utilisent cette fonctionnalité (banque, etc.) sont vraiment conçus comme "entrez, faites votre chose, puis partez". En tant que tels, ces alertes et messages me rappellent vraiment que j'ai peut-être toujours cet onglet ouvert. J'ai déjà quitté la page, pas besoin de me dire que la session expire. Pire cas? Je me reconnecte.

Maintenant, la seule (grosse) exception serait toute sorte d'entrée de données volumineuse où un utilisateur pourrait potentiellement entrer beaucoup de données, ne jamais soumettre, puis perdre sa session. Cependant, dans ces scénarios, l'idéal serait qu'il y ait une sorte de fonctionnalité d'enregistrement automatique (ala Google Docs).

0
DA01