2009-04-21 6 views
1

Nous avons plusieurs pages dans notre application Ajax ASP.net qui actualisent automatiquement le contenu de UpdatePanels en fonction d'un événement de minuteur, mais le problème est que nous avons besoin d'attendre la session Web et l'actualisation automatique empêche cela. Y at-il un moyen d'empêcher l'événement de publication différée de modifier la session Web ou toute autre solution pour permettre à la session Web d'expirer pendant l'actualisation automatique du contenu du UpdatePanel?Comment empêcher la réinitialisation du délai d'expiration de la session lorsque le contenu de UpdatePanel est actualisé par un événement Timer?

Voici un exemple pour illustrer ce problème. J'ai mis le délai d'attente de session à 3 minutes et ai un temporisateur dans le UpdatePanel qui cochée toutes les minutes et modifie le contenu du UpdatePanel basé sur l'état courant. Une fois connecté, je navigue sur cette page et je ne fais rien pendant 5 minutes, puis j'essaie de cliquer sur une autre page et je suis toujours connecté car la session n'a pas expiré.

Répondre

2

Vous pouvez suivre l'activité de l'utilisateur côté client. S'il n'y a pas de déplacement de la souris, etc., vous pouvez vous déconnecter en utilisant la classe Sys.Services.AuthenticationService (partie de Microsoft AJAX Library 1.0). Vous pouvez afficher une confirmation avant de vous déconnecter, afin que l'utilisateur puisse l'annuler s'il est présent. Une fois déconnecté, vous pouvez envoyer un message à l'utilisateur en lui disant qu'il a été automatiquement déconnecté pour cause d'inactivité.

Comment ma solution résoudrait votre scénario:

Vous définissez le délai d'attente de session à 3 minutes et une minuterie dans le UpdatePanel qui fait tic tac chaque minute et modifie le contenu de l'UpdatePanel en fonction de l'état actuel. Une fois connecté, vous accédez à cette page et ne faites rien. Après 3 minutes d'inactivité, vous affichez une confirmation à l'utilisateur lui demandant d'annuler la déconnexion automatique en utilisant le Sys.Services.AuthenticationService. Si l'utilisateur ne prend toujours aucune mesure, vous le déconnectez après quelques secondes. Vous sortez un "message déconnecté" que l'utilisateur verra quand il revient au navigateur après 5 minutes. Quand il clique alors sur une autre page, il n'est pas connecté.

+0

D'accord, je comprends ce que vous dites mais j'espérais une solution plus simple. Pour paraphraser, puisque la session n'est pas expirée en raison de la publication de l'événement Timer, vous suggérez de garder une trace de combien de temps l'utilisateur a été inactif en s'appuyant sur autre chose que le délai d'expiration de la session. Il pourrait même se greffer sur l'événement d'actualisation Timer. Ma seule préoccupation est qu'il semble que je finirais par devoir gérer manuellement le timeout de la session. – Brian

+0

Sys.Services.AuthenticationService fait partie de Microsoft AJAX Library 1.0. C'est une bibliothèque JavaScript. Donc, ce que je dis, c'est que vous gardez une trace de l'activité des utilisateurs du côté client. Déplacement de la souris, etc. Vous déconnectez l'utilisateur avec un appel JavaScript à la fonction de déconnexion de l'objet Sys.Services.AuthenticationService. – knut

+0

Pour mon cas, il serait nécessaire d'invalider la session plutôt que d'utiliser Sys.Services.AuthenticationService car le mécanisme de connexion est personnalisé et basé sur la session. Je crois que j'ai une solution qui n'implique aucun javascript ce qui est préférable mais j'ai besoin de le tester. Merci pour votre réponse et vos commentaires car cela m'a amené à réfléchir à ce problème d'une nouvelle manière qui a conduit à ma solution proposée. – Brian

Questions connexes