2008-12-12 10 views
16

J'ai mis en place un avertissement de délai d'attente de session en utilisant javascript qui demande simplement à l'utilisateur s'il souhaite prolonger sa session ou se déconnecter. Le problème est que ceci est pour un portail intranet où les utilisateurs expérimentés auront souvent plusieurs fenêtres ou onglets de navigateur ouverts en même temps à l'application. Actuellement, ils seront invités à se déconnecter de toutes les fenêtres du navigateur. Comment puis-je rendre le code plus intelligent pour détecter qu'ils utilisent activement une autre session de navigateur?Comment afficher un avertissement de délai de session suffisamment intelligent pour gérer plusieurs navigateurs ou onglets ouverts

+0

Ceci est une question intéressante et très pratique. Je vais regarder pour la réponse à cette question car je n'ai pas de réponse immédiate :) –

+0

Aucune idée pourquoi cela a été vers le bas voté. – MusiGenesis

+0

Oui, j'étais aussi surpris. Je l'ai voté, Aussi puisque Joel est nouveau à SO, il n'a rien fait de mal pour le décourager en votant contre :) –

Répondre

2

Vous devrez vérifier l'état de la session sur le serveur en utilisant Ajax et garder une trace de toutes les sessions ouvertes/fenêtres que l'utilisateur a. Vous seriez alors en mesure de cibler une seule des sessions disponibles avec l'avertissement de déconnexion.

En réponse à votre commentaire:

Ne pas utiliser le mécanisme de la session intégrée, concevoir votre propre en utilisant un tableau de presistent côté serveur ou un journal de base de données. Non, rien dans la requête HTTP ne vous indique le nombre de navigateurs ouverts, mais vous pouvez affecter votre propre cookie sessionID lorsque l'utilisateur ouvre la fenêtre de chaque navigateur. Faites un appel Ajax au serveur, vérifiez si l'utilisateur a expiré et si vous êtes l'entrée la plus basse (ou la dernière) dans le journal de session, vous êtes le navigateur qui reçoit l'avertissement.

+2

2 pensées: 1) comment vérifier l'état de la session d'une application .NET sans réellement prolonger la session? 2) existe-t-il un moyen de déterminer le nombre de fenêtres de navigation d'un utilisateur? Rien dans la requête http ne vous dit cela – Joel

+0

Avoir la fonction pour mettre à jour la session appelée lorsque l'utilisateur effectue une action, n'appelez pas la fonction lorsque vous vérifiez l'état de la session. Vous pouvez détecter combien de navigateurs sont ouverts en fonction de la chaîne d'agent, ne pensez pas que vous pouvez détecter les fenêtres/onglets de chacun. – Adam

+0

Je ne comprends pas comment cela fonctionnerait.En outre, s'ils utilisent des navigateurs distincts (comme IE et FF) ou même des instances distinctes du même navigateur, ils ont des sessions différentes donc ce n'est pas un problème. – Joel

0

Est-ce que cela fonctionnerait?

Stockez un cookie Javascript et vérifiez que pour déterminer si la session a été étendue dans un autre onglet?

ressemble à ceci fonctionne ...

+1

Après 4 ans, cela ressemble toujours à la bonne réponse, pour ASP.NET au moins. Le problème est que vous avez besoin d'une combinaison d'approches côté client et côté serveur, et je pense que vous ne pouvez pas l'obtenir côté serveur (parce que vous pouvez suivre login/out ou session start/end, mais pas client- activité secondaire dont le serveur n'est pas conscient). Je pense donc que vous avez besoin précisément de ce que vous suggérez ici. Je l'afficherai quand je l'aurai fait fonctionner. – philw

2

Vous ne pouvez pas compter sur tous les onglets/fenêtres pour faire partie de la même session, car ils pourraient être frayé et contenu dans des processus séparés et vous n'avez pas beaucoup de contrôle sur cela. Mais si votre code référence un cookie Javascript, vous pouvez vérifier votre état de pseudo-session via un postback (AJAX synchrone ou asynchrone). Mais alors vous dépendez des cookies activés sur le navigateur de l'utilisateur.