2010-11-24 24 views
7

J'ai un site Web ASP.NET qui utilise l'authentification par formulaire. Le délai d'attente est de vingt minutes.Valeurs de contrôle perdues lorsque la session d'authentification expire dans ASP.NET

J'ai remarqué que si un utilisateur remplit à moitié un formulaire, puis expire, il est redirigé vers la page de connexion, le remplit et est redirigé vers le formulaire mais avec des contrôles EMPTY.

J'avais présumé que ASP.NET utiliserait un skulduggery pour repeupler les contrôles de formulaire lorsque cela se produit.

Y a-t-il des changements que je peux faire pour m'assurer que c'est le cas?

Répondre

1

Je pense que la meilleure solution à votre problème consiste à définir l'attribut slidingExpiration sur true sur l'élément d'authentification par formulaires dans web.config. De cette façon, l'utilisateur ne perd ses données que lorsqu'il prend plus de 20 minutes pour remplir le formulaire. Le problème se produit parce que asp.net "se souvient" des valeurs qui ont été entrées dans le formulaire au moyen d'un concept appelé viewstate, qui est fondamentalement juste un champ de formulaire caché. Lorsque le serveur redirige vers la page de connexion, tous les champs de formulaire sont perdus car une redirection ne peut pas contenir de données POST.

Si vous voulez que vos utilisateurs puissent prendre plus de 20 minutes pour remplir le formulaire, vous pouvez envisager d'avoir du javascript sur la page contenant le formulaire, ce qui fait un appel ajax au serveur toutes les x minutes. Avec l'expiration glissante, cela réinitialisera l'heure d'expiration de la session à chaque fois que l'appel ajax est déclenché, et donc jamais déconnecter votre utilisateur tant qu'ils regardent la page contenant le formulaire.

+0

Je comprends qu'il y a aussi une chose comme l'affichage inter-pages. Je pensais que cela aurait pu être un bon mécanisme par défaut pour que l'état d'affichage persiste de la page d'origine, à travers la page de connexion et à nouveau à la page d'origine. Mais malheureusement non! – David

+0

Merci pour la réponse d'ailleurs, c'est ce que je cherchais. Je ne suis pas très enthousiaste à l'idée de désactiver le timeout de l'authentification. Je dois y réfléchir. – David

0

Vous pouvez enregistrer dynamiquement le contenu de chaque contrôle dans Session dès qu'il est rempli en attachant un événement de type AJAX WebMethod à l'événement onChange. En utilisant cette méthode, la session n'interrompait pas tant que l'utilisateur remplissait avec diligence au moins un contrôle toutes les 20 minutes.

+0

Je ne comprends pas cette solution. Comment modifier le viewstate de la page en utilisant JavaScript, en considérant qu'il est codé? Et comment le stockage dans ViewState aide-t-il lorsque ViewState n'est pas préservé? La partie AJAX empêcherait le timeout, comme Klaus l'a décrit. – David

+0

Page.ViewState n'est actuellement pas disponible à partir d'un WebMethod (autant que je sache), donc je vais modifier ma réponse. La seule différence restante dans ma réponse, alors, est le câblage de l'AJAX aux événements onChange. Merci. – LesterDove