2010-08-16 7 views
6

Les utilisateurs signalent des problèmes de connexion à l'un de nos sites ASP.NET. Lorsque je vérifie les journaux IIS, il semble que le cookie FormsAuthentication n'est pas mis en cache par leurs navigateurs après leur ouverture de session.En quoi les cookies ASP.NET FormsAuthentication peuvent-ils être à l'origine de la désactivation des cookies?

Je ne pense pas que ce soit aussi simple que «l'utilisateur a configuré son navigateur pour ne pas accepter les cookies» parce que:
a) Si les cookies en général ne fonctionnaient pas pour leur navigateur, ils n'auraient jamais été aussi loin comme ils ont dans le processus - les cookies de session ASP.NET semblent fonctionner correctement, par exemple.
b) Ce ne sont généralement pas les utilisateurs qui sauraient même comment désactiver les cookies. Donc je pense que ça doit être quelque chose d'autre. Quel genre de problèmes peuvent provoquer des cookies ASP.NET FormsAuthentication à cesser de fonctionner, en dehors de utilisateurs simplement en configurant leurs navigateurs pour rejeter les cookies?

edit: Par exemple, This answer to another question suggère que parfois les cookies FormsAuthentication sont supprimés car ils sont trop volumineux - peut-être que quelqu'un peut faire la lumière là-dessus? Edit: le cookie FormsAuthentication pour l'un de nos sites est de 233 octets - est-ce un peu gros? Peut-il être réduit? Peut-être que cela aiderait.

edit: Je remarque que le code utilise FormsAuthentication.SetAuthCookie() et Response.Redirect() au lieu de FormsAuthentication.RedirectFromLoginPage() - cela pourrait-il être lié?

Répondre

2

Est-il possible que l'utilisateur accède à votre serveur Web via 2 domaines différents? Par exemple, si je vais sur www.foo.com et que j'obtiens un cookie d'authentification, puis redirige vers www.bar.com, la demande envoyée à www.bar.com ne contiendra certainement pas le cookie défini par www.foo.com .

Ce problème se produit également si vous définissez le cookie à htp: //login.foo.com, puis redirigez vers htp: //content.foo.com. Cependant, je crois que le cookie pourrait être configuré en utilisant un caractère générique, de sorte qu'il s'appliquerait à * .foo.com.

Editer: volontairement mal orthographié "http" de sorte qu'il n'y ait pas de liens ordures cliquables réels dans cette réponse. :)

+0

Merci. Cela pourrait en effet provoquer un problème d'authentification des formulaires, mais ce n'est pas la cause de mon problème. – codeulike

+0

Rats - tellement pour la réponse facile, hein? Si vous trouvez la cause première, postez-la comme réponse ici - maintenant je suis curieux. – mikemanne

1

Il y a un délai d'inactivité - se connectent-ils, puis ne font rien pendant un moment, puis tentent d'accéder à nouveau au site? Vous pourriez vérifier cela. Et, voir si le délai d'attente est défini comme étant un délai d'attente de glissement (par exemple, 20 minutes après la dernière demande) ou un délai d'attente fixe (par exemple, 20 minutes après la connexion). Je pense que le délai d'attente glissant n'est pas le paramètre par défaut.

+0

Merci. Cela pourrait en effet provoquer un problème d'authentification des formulaires, mais ce n'est pas la cause de mon problème. – codeulike

2

Si votre site s'exécute dans une batterie de serveurs Web, vous devrez peut-être définir le même machine keys sur tous les serveurs ou si l'utilisateur change de serveur, il ne pourra peut-être pas déchiffrer le ticket d'authentification. La différence entre RedirectFromLoginPage() et SetAuthCookie suivie par Response.Redirect() est que la première fonctionne également si les cookies sont désactivés (en fait, il utilise un paramètre de chaîne de requête pour suivre les utilisateurs authentifiés).

2

pourrait-il que le nom de serveur Web, ou une partie du nom DNS contient un trait de soulignement?

par exemple:

www2_http.mydomain.com

Je me souviens d'avoir ce problème pendant un certain stade de développement, où les sessions ne se comporterait pas régulièrement. Suppression du trait de soulignement du nom de domaine machines résolu le problème pour moi.

ce qui a trait

4

J'ai eu un problème similaire (pas avec le cookie FormsAuthentication, mais avec un cookie loadbalancer collant) parce que le serveur n'a pas un bon moment/configuration fuseau horaire, donc il y avait des cas où la La date d'expiration du cookie était antérieure à l'heure actuelle dans la machine de l'utilisateur.

voir ici: How do expire values work for cookies and caching?

espère que cela aide

+0

Même problème ici, sauf que le fuseau horaire de la machine client n'a pas été correctement défini. Comment réparez-vous cela? - le cookie expire le lendemain? –

2

Utilisez-vous plus d'un domaine pour parler à la même application web? Rappelez-vous que les cookies sont spécifiques au domaine, www.mydomain.com <> www.mydomain.net>> my.domain.net.

Un coup dans le noir, avez-vous des clés de la machine dans votre web.configs?