J'ai un code comme celui-ci qui est exécuté lorsqu'un utilisateur est autorisé: i puis redirige vers un contrôleur / action qui a l'attribut AuthRize: P> <authentication mode="Forms">
<forms loginUrl="~/Home/Unauthorized" timeout="2880" />
</authentication>
<sessionState timeout="120"></sessionState>
3 Réponses :
Quelques pensées avant d'entrer dans une solution possible de la raison pour laquelle vos logines expirent. Premièrement, le cookie de formulateur et la séance de séance sont deux choses différentes complètement. Vous pouvez avoir l'un ou l'autre, ou les deux ou non. En conséquence, les délais d'attente de ces deux éléments ne sont pas non plus liés.
Le cookie FormsAuthentication est un cookie crypté contenant des informations de base telles que le nom d'utilisateur et une valeur d'expiration. L'application .NET utilise ce cookie une fois qu'un utilisateur est authentifié pour savoir si l'utilisateur est autorisé pour certaines ressources. P>
Qu'est-ce qui contrôle le cryptage et le déchiffrement du cookie de formateurs est le machine pour cette application Web sur IIS. La machineKey est un ensemble de clés utilisées pour chiffrer et déchiffrer le cookie. Par défaut, une application Web sur IIS est définie pour autogénérer la clé de la machine. Cela signifie que lorsqu'une application commence, une clé de machine aléatoire est générée. Si une application recycle, vous obtenez une nouvelle clé machine. De plus, si vous hébergez sur un fournisseur partagé, l'hôte Web disposera généralement de votre charge d'application équilibrée, ce qui signifie hébergé par plusieurs serveurs. Chacun de ces serveurs générera automatiquement une clé machine. P>
Si votre application Web est sur un scénario équilibré de la charge, chaque machine de la ferme Web ne peut pas déchiffrer le cookie crypté de l'autre. Cela donnera l'apparition de "être déconnecté". L'exemple de ceci est de vous connecter sur Web Server A, puis une demande ultérieure du serveur Web B. Web Server B ne partage pas une clé de machine avec Web Server A et ne peut pas déchiffrer le cookie, en envoyant l'utilisateur à la page de connexion. p>
La solution consiste à définir la section de la machine de votre web.config de sorte que chaque instance d'IIS utilisera les mêmes clés que si le pool d'applications recycle, vous avez toujours la même clé de la machine. P >
ici serait un exemple de la machine (Utilisez la version .NET 2.0) que vous puissiez placer dans votre web.config p> des pensées supplémentaires sont que votre expiration dans votre web.config (2880) et ce que vous définissez réellement l'expiration à être (120 ) ne correspondent pas. Vous voudrez peut-être qu'ils correspondent tous les deux. p> p>
Si vous courez derrière un équilibreur de charge, vous souhaitez vous assurer que la WEB Farm utilise une clé cohérente comme indiquée par la réponse de Tommy. P>
D'autres choses à vérifier seront que la métabase IIS SETGS pour chaque serveur est identique. Ils ont besoin d'avoir le même chemin et id. P>
Vous voudrez également examiner la session de holding sur Proc (votre web.config ressemble à PROC) qui est susceptible de la panne réseau et des recycles d'applications aléatoires. P>
Fondamentalement, un résumé de ce lien. http://msdn.microsoft.com/ EN-US / Bibliothèque / VStudio / MS178586 (V = VS.100) .aspx P>
Si vous pouvez publier plus de votre config, si possible et donnez plus de détails sur votre configuration de votre environnement, il sera plus facile de vous pointer dans une direction plus ciblée. P>
Essayez celui-ci:
Web.config Code: P>
<system.web> <httpRuntime maxRequestLength="40000000" useFullyQualifiedRedirectUrl="true" executionTimeout="600000" /> <authentication mode="Forms"> <forms loginUrl="~/Home/Unauthorized" timeout="2880" cookieless="UseCookies" /> </authentication> </system.web>
Je ne comprends pas pourquoi les gens sont confondus avec la forme authentification Timeout de cookie et délai de session de serveur..ils sont 2 dilgngs différents ... mate
Vous dites à votre serveur pour expirer l'heure de l'utilisateur en 120 min et sur l'autre côté du navigateur de navigateur pour contenir le ticket d'authentification pour 2280 ... Évidemment, le ticket est expiré après 120 ans et que l'utilisateur obtient le délai d'attente ... pendant que l'utilisateur tenait toujours précédent Ticket d'authentification ..
Avez-vous explicitement défini votre
machine code> dans votre web.config?
Bonjour, je ne suis pas un développeur .NET, mais j'avais le même problème dans une application de printemps. Je définissais le cookie avant une redirection et, car le cookie est réellement défini sur le client avec une réponse HTTP, un appel de redirection avant que la réponse ne soit renvoyé modifiera l'objet de réponse avec un nouveau. Vous perdrez donc le changement que vous avez effectué. Je reçois la solution qui met la création de cookie après rediriger.