160 votes

Délai d'authentification des formulaires et délai d'attente de sessionState

J'ai un code que je suis en train d'examiner concernant les interruptions de session du site Web. Dans le web.config, je suis tombé sur ce code.

 <authentication mode="Forms">
  <forms loginUrl="~/Auth/SignOn.aspx" timeout="40" slidingExpiration="true" />
</authentication>

<sessionState timeout="30" />

Quelqu'un sait-il si l'un prévaut sur l'autre, et en quoi ils sont différents ? Merci.

2 votes

259voto

Icarus Points 36951

Ce sont des choses différentes. La valeur Forms Authentication Timeout définit la durée, en minutes, pendant laquelle le cookie d'authentification est considéré comme valide, ce qui signifie qu'après l'expiration de la période d'authentification, le cookie ne sera plus valide. value nombre de minutes, le cookie expirera et l'utilisateur ne sera plus authentifié - il sera redirigé automatiquement vers la page de connexion. Le site slidingExpiration=true signifie essentiellement que tant que l'utilisateur effectue une demande dans le délai imparti, il continuera d'être authentifié (plus de détails à ce sujet dans le site Web de l'UE). aquí ). Si vous définissez slidingExpiration=false le cookie d'authentification expirera après value nombre de minutes, que l'utilisateur fasse une demande dans le délai imparti ou non.

El SessionState La valeur timeout définit la durée pendant laquelle un fournisseur d'état de session doit conserver les données en mémoire (ou dans le magasin de sauvegarde utilisé, SQL Server, OutOfProc, etc) pour une session particulière. ) pour une session particulière. Par exemple, si vous placez un objet dans la session en utilisant la valeur indiquée dans votre exemple, ces données seront supprimées au bout de 30 minutes. L'utilisateur peut toujours être authentifié mais les données de la session ne sont plus présentes. Le site Session Timeout est toujours remis à zéro après chaque demande.

33 votes

Une précision : Le délai d'expiration de l'authentification des formulaires définit le délai d'expiration de l'authentification de l'utilisateur. Ticket pas nécessairement pour le cookie où le billet peut être stocké. Le cookie peut n'avoir aucune durée d'expiration (il est alors appelé "cookie de session", ce qui signifie qu'il dure jusqu'à ce que l'utilisateur ferme le navigateur), ou il peut même ne pas y avoir de cookie du tout (authentification par formulaire "sans cookie"). Dans le cas d'un cookie persistant, l'authentification par formulaire fixe l'expiration du cookie et celle du ticket au même moment.

19 votes

Une autre clarification de MSDN : "Pour éviter de compromettre les performances, et pour éviter de multiples avertissements du navigateur pour les utilisateurs qui ont activé les avertissements relatifs aux cookies, le cookie est mis à jour lorsque plus de la moitié du temps spécifié s'est écoulé." Donc le délai d'expiration du cookie n'est réinitialisé que s'il est à moitié écoulé. D'où la suggestion de le définir à 2x le délai d'expiration de la session.

25voto

Silvan Hofer Points 1241

La valeur slidingExpiration=true signifie essentiellement qu'après chaque demande effectuée, le minuteur est remis à zéro et tant que l'utilisateur effectue une demande dans le délai imparti, il continuera à être authentifié.

Ce n'est pas correct. Le délai d'expiration du cookie d'authentification ne sera réinitialisé que si la moitié du délai d'expiration s'est écoulée.

Voir par exemple https://support.microsoft.com/de-ch/kb/910439/en-us o https://itworksonmymachine.wordpress.com/2008/07/17/forms-authentication-timeout-vs-session-timeout/

19voto

Lopsided Points 1412

D'après ce que j'ai compris, ils sont indépendants les uns des autres. En maintenant le délai d'expiration de la session inférieur ou égal au délai d'expiration de l'authentification, vous pouvez vous assurer que les variables de session spécifiques à l'utilisateur ne sont pas conservées après la fin de l'authentification (si c'est ce qui vous préoccupe, ce qui me semble normal lorsque vous posez cette question). Bien sûr, vous devrez gérer manuellement l'élimination des variables de session lors de la déconnexion.

Voici une réponse décente qui pourrait répondre à votre question ou du moins vous orienter dans la bonne direction :

7voto

Karl Anderson Points 22138

La différence réside dans le fait que l'un (Forms timeout) a trait à l'authentification de l'utilisateur et que l'autre (Session timeout) a trait à la durée de stockage des données en cache sur le serveur. Ce sont donc des choses très indépendantes, et l'une n'a pas la priorité sur l'autre.

5voto

shlasasha Points 133
      <sessionState timeout="2" />
      <authentication mode="Forms">
          <forms name="userLogin" path="/" timeout="60" loginUrl="Login.aspx" slidingExpiration="true"/>
      </authentication>

Cette configuration me renvoie à la page de connexion toutes les deux minutes, ce qui semble contredire les réponses précédentes

4 votes

Cela peut se produire si les informations relatives à la connexion sont stockées dans des variables de session et que, lorsque celles-ci sont effacées, le système redirige vers la connexion. Cela dépend donc du code ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X