y a-t-il de situations dans lesquelles P> dans web.config échouerait Autogénérer une nouvelle machine à la machine sur l'App pool recycler? C'est le comportement que je vois ... p> J'utilise standard ASP.NET Formulatingtication dans une application MVC. Si je connecte un utilisateur à l'aide de Cela se produit sur l'une de mes installations IIS (XP), mais sur une configuration IIS différente (serveur 2K3) Le cookie de formateurs (sous le nom standard ".aspxauth") reste valide et continue d'autoriser l'utilisateur. P> Est-ce que quelqu'un sait pourquoi cela se produit ou quelle configuration contrôle ce comportement? P> De toute évidence, le recyclage du pool d'applications n'a aucun contrôle sur le fait que le navigateur envoie toujours le cookie .aspxauth (tant que je n'ai pas fermé mon navigateur et que le cookie n'a pas expiré). p> Pourquoi cela ne se produit-il pas à la fois pour les configurations IIS / ASP.NET? P> Si ce n'est pas clair, une manière plus simple de former le La question est: p> pourquoi Plus d'informations de débogage: P> Si Je joins le code suivant à l'événement Global.Asax.cs's FormsAuthentication_AonTuttiCate ... P>
FormsAuthentication.getauthtecture Code> et n'utilisez pas de cookie persistant (s'appuyant sur la session du navigateur pour se souvenir de mon état autorisé), je m'attendrais à recyclage du pool d'applications IIS invalider la session Connaissance de ce cookie ... et déconnecte ainsi tous les utilisateurs qui n'ont pas de cookies persistants. P>
request.cookies code> pendant le
Application_beginrequest Code> Événement ... mais une fois que le contrôle passe à l'événement suivant disponible dans global.aSax.cs
(Application_authenticateRequest code>), le cookie a été supprimé de la collection
Demande.cookies code> strong>. p>
httpcontext.current.request.cookies [". Aspxauth"] code> passe de
{system.web.httpcookie} code> à null Lorsque je marche, dans une seule demande, à partir de
Application_beginrequest code> à
Application_authenticArequest code>? p>
var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
var val = cookie.Value;
try
{
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(val);
}
catch (Exception)
{
}
}
3 Réponses :
Les cookies d'authentification des formulaires n'ont rien à voir avec l'état de la session. P>
1) Recyclage Votre piscine d'applications recycle votre session (si vous utilisez InProCroC Session Management), ce qui apparemment fait i> manipule parfois le biscuit Aspxauth (comme indiqué quand il est retiré après l'événement BeguRequest). 2) Je vais rendre ma question plus claire en indiquant "Session de navigateur". De MS Documentation: CreatePerSistentCookie Type: System.boolant Vrai pour créer un biscuit durable (celui qui est enregistré sur des sessions de navigateur); Sinon, faux.
Absurdité. Les cookies résident sur les clients. Rien que vous puissiez faire sur le serveur supprimera les cookies stockés sur les clients.
Vous le pensiez, non? Le cookie n'est pas supprimé du serveur avant la fin de l'application_beginrequest. Je sais à quel point cela sonne ridicule, c'est pourquoi je pose cette question. J'ai un débogage en hausse et quand je marche de l'application_beginrequest à Application_AuthentiCaequest, la valeur de httpcontext.current.request.cokies [". Aspxauth"] passe de {system.web.httpcookie} à null.
... Le client envoie évidemment toujours le cookie. C'est toujours dans le navigateur et dans la demande. Mais il est caché de la majorité du traitement par le serveur de la demande en raison de cette suppression.
OK, vous êtes confondu entre httpcontext.current.request.cokies [". Aspxauth"] et ce qui est sur le client. Peu importe cette collection sur le serveur. Le client va vous envoyer ce cookie sur la demande suivante.
Non, je ne suis vraiment pas. La question est simplement la question suivante: pourquoi httpcontext.current.request.cokies [". Aspxauth"] passe de {System.Web.httpcookie} à NULL quand j'arrive, dans une seule demande, à partir de Application_BeGinReQuest?
Ok, je vois maintenant que vous l'avez effacé. Êtes-vous sûr que les cookies sont disponibles si tôt dans le pipeline? Peut-être vérifier avant l'authentification d'événement pour voir si des cookies sont présents à ce moment-là.
Je viens d'ajouter les "informations de débogage" à la question ci-dessus qui répond quelque peu à cette question. Le cookie est toujours visible dans demande.Cookies lors du formateur ... Mais si le pool d'applications a été recyclé puisque le cookie a été distribué, il est supprimé des .cookies après la fin de cet événement.
Vous avez également reçu une exception après le recyclage, il n'est donc pas inattendu que celui-ci soit supprimé. Plus important encore, votre exception ne fait aucun doute en raison du cookie signé avec une valeur de Per-AppDomain. Si cela change (comme sur un recyclage), il sera impossible pour la nouvelle Appdomain de déchiffrer le cookie crypté de l'ancien Appdomain.
Oui exactement! Je suis d'accord. Donc, ma seule question est la suivante: pourquoi cela ne se produit-il pas pour l'une de mes configurations IIS? Je veux que cela se produise partout, parce que cela rend le sens total pour moi. Il semble que, dans les 2K3 IIS, il ne soit pas utiliser de valeur Per-AppDomain lors de la signature ou de la restauration en quelque sorte après la recyclage de la piscine de l'App ... pas sûr.
Je ne sais pas. Cela dépend peut-être du timing. Vérifiez la machine.Config pour le réglage de la machine.
Malheureusement, même avec un réglage de machineKey.validationkey = "autogénérer, isolatopps" et hichette.decryptionkey = "autogénère, isolateAppps", ce comportement continue.
Désolé, ma question était ces paramètres de la même manière que tous les serveurs.
Pour autant que je puisse dire, oui. Web.configs identiques. Y a-t-il un moyen de dire quelle valeur de machine est en réalité i> utilisé, au cas où il sera remplacé quelque part que je ne connais pas? Il se comporte bien comme un autogénère n'est pas sur ou ne fonctionne pas.
Downvote parce que même si la réponse est techniquement correcte, cela ne répond pas à la question.
@erikkallen: bon point. Je ne sais pas pourquoi j'ai jamais pensé que l'OP demandait à propos de l'état de la session.
Notre application est apatride (aucune session requise), mais nous avons eu une situation dans laquelle un pool d'applications recycle a provoqué une invalidation de tous les cookies cryptés à la machine sur un environnement de serveur (question décrite ci-dessus). Cela a été causé parce que les modifications de la machine Le modificateur Autogénere spécifie que ASP.NET génère une clé aléatoire et des magasins forts> forts> dans l'autorité de sécurité locale (LSA) p>
https://msdn.microsoft.com/en-us/library/w8h3skw9%28v=vs.85%29.aspx?f=255&msppperror=-2147217396 P>
blockQuote>
"Autorité de sécurité locale (LSA)" désigne l'utilisateur attribué au pool d'applications, voir ci-dessous pour plus de détails car cela s'est avéré être le problème. P>
Le problème a menti dans le fait que nous utilisons un compte d'utilisateur dédié fort> pour exécuter le pool d'applications et simplement créer l'utilisateur, puis l'attribuer au pool d'applications ne semblait pas déclencher la création. de la section de registre où la clé de la machine est ensuite stockée. Vous pouvez vérifier cela vous-même en vérifiant le registre p>
Il semble que l'élaboration du paramètre LockUserProfile Code> sur le niveau de pool d'applications fixe également le problème.
Services d'information sur Internet (IIS) 7.0 (Windows Vista, Windows Server 2008) Introduction L'identité du pool d'applications, un nouveau mécanisme d'isolement permettant de fournir une sécurité accrue des serveurs qui exécutent des applications ASP.NET. Cependant, les sites qui fonctionnent sous l'identité du pool d'applications n'ont pas accès au registre HKCU. C'est ici que l'ASP.NET Runtime stocke ses clés générées automatiquement. Le résultat est que ASP.NET ne peut pas persister la clé générée automatiquement lorsque le pool d'applications est réinitialisé. Par conséquent, chaque fois que W3WP.exe est réinitialisé, une nouvelle clé temporaire est générée. Remarque Ce n'est pas un problème dans IIS 7.5 (Windows 7, Windows Server 2008 R2) et versions ultérieures. Sur ces versions de IIS, ASP.NET peut persister ses clés générées automatiquement dans un emplacement différent survivant à la réinitialisation du pool d'applications. P>
Est-il configuré pour utiliser le service ASP.NET State pour stocker la session au lieu d'INPROC?
Bonne pensée - Non, ils utilisent tous les deux InProc, malheureusement.