2008-11-21 10 views
4

J'ai un problème avec une application ASP.NET qui me rend fou. Lorsqu'un utilisateur laisse une page inactive pendant un certain temps, la session a expiré et des erreurs ont été générées, car les variables de session ne peuvent pas être résolues (l'erreur se résorbera de toute façon, mais ce n'est pas le problème). J'ai codé un 'defribulator' qui effectuera une publication invisible après expiration de la moitié du délai d'expiration de la session et cela semble fonctionner - laisser l'application pendant 30 minutes n'a pas causé d'erreur même si le délai de la session était de 20 minutes. Cependant, ce matin, l'un des autres Devs a connu un timeout - Comment est-ce possible?Formulaires L'authentification expire quand elle ne devrait pas l'être?

Lors d'une enquête plus poussée, je pense que le problème se produit lorsque le délai d'authentification par formulaires est dépassé - même si le défribulateur a maintenu (apparemment) la session en vie. J'ai lu que le ticket d'authentification ne sera réémis si une publication se produit après la moitié de la période de délai spécifiée et cela ne peut pas le problème que le defrib aura émis des demandes au cours de la seconde moitié du délai d'attente - alors pourquoi était il n'a pas été réédité?

Je suppose que je pourrais contourner le problème en définissant le délai d'authentification à 8 heures ou plus, mais c'est une mauvaise solution.

Quelqu'un peut-il faire la lumière là-dessus?

Merci à l'avance

[Editer 24/11/2008] L'examen des fichiers journaux a prouvé instructif et confus. Je peux voir le défibreur se déclencher après 10 minutes d'inactivité, mais alors que l'identificateur Session_Id semble être consenti partout, l'identification du ticket d'authentification des formulaires change - je ne sais pas si c'est le cas ou non. Je suis en train de formuler un plan de test maintenant et je reviendrai quand je les aurai terminés. Merci à tous ceux qui ont fourni des commentaires jusqu'à présent. [Edit 24/11/2008] Eh bien, je suis perplexe - tout semble fonctionner correctement pour le moment! Le ticket d'authentification est en cours de régénération lorsque la tâche est exécutée (l'ID change) et que la session est maintenue. Était-ce un problème de serveur - ne peut pas dire. J'ai déjà eu ce problème avant et je n'ai jamais été au plus bas et c'est très frustrant - cela ne devrait sûrement pas être si difficile. Je vais devoir laisser tomber pour le moment car je dois passer à d'autres aspects de l'application. Je vais devoir coder autour de ce problème - qui ne se produira jamais sur le site du client.

Merci encore pour l'entrée de tout le monde - si je fais des progrès, je vais le poster ici.

+0

J'ai également vu ce problème. Espérons que quelqu'un aura une bonne explication. –

+0

Générez-vous manuellement le ticket d'authentification? –

+0

Je réutilise le code de notre bibliothèque interne, donc je vais devoir vérifier lundi. Je vous le ferai savoir (merci pour votre saisie) – DilbertDave

Répondre

6

Cela peut également se produire lorsque i recycle ou termine le pool d'applications.

Vous voudrez peut-être vérifier Troubleshoot Forms Authentication Il se peut que le client ait perdu son cookie.

Si vous générez manuellement le ticket d'authentification, vous devez définir le délai d'attente dans le code et non le web.config

+0

Y a-t-il une manière de gérer cela afin que l'authentification/session ne soit pas perdue? – DilbertDave

+0

Votre suggestion m'a conduit à cet article qui peut m'aider (je vais jeter un oeil le lundi) http://msdn.microsoft.com/en-us/library/ms972429.aspx – DilbertDave

+0

Mon équipe a eu des problèmes avec les délais de session et le lien de Dave ont été extrêmement utiles, merci DilbertDave! –

1

Ne pas dire à l'évidence, mais:

  1. sont la session et les délais d'expiration FormsAuthentication définis sur la même valeur?
  2. Est-ce que slidingExpiration est défini sur true?
0

Merci pour la réponse les gars: J'ai déjà défini explicitement slidingExpiration à true dans le web.config sans effet.

Les valeurs de temporisation sont: Session: 20 minutes FormsAuthentication: 60 minutes

J'ai quitté le délai d'attente de la session comme il est et a réduit le FormsAuthentication à 12 minutes pour les tests. La défrib 'pings' toutes les 10 minutes. Si je laisse la page inactive pendant 14 minutes, puis cliquez sur un bouton, je reçois le problème #edit: mais pas à chaque fois qu'il semble! #.

1

Avez-vous vérifié par rapport à un pool d'applications ou au recyclage des processus de travail à l'origine du problème?

+0

Pas encore - il a été suggéré hier après que je sois parti, donc je regarderai lundi. Est-ce que cela causerait l'abandon de l'authentification des formulaires - je pensais que c'était basé sur des cookies. – DilbertDave

+0

Cela aurait pu être le problème (qui semble avoir disparu maintenant!) Mais je ne peux pas être sûr. Rien dans les journaux d'événements :-( – DilbertDave

+0

Même s'il s'agit d'un cookie, comment le cookie est-il décrypté correctement si la machine change les clés utilisées pour chiffrer le cookie? Bien sûr, c'est un peu une hypothèse, mais c'était quelque chose vu lors de l'utilisation de l'authentification par formulaire. –

Questions connexes