Délai d'expiration de l'authentification par formulaire vs délai d'expiration de sessionState

139

J'ai du code que je suis en train de parcourir concernant les temps morts 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 prime sur l'autre et en quoi ils sont différents. Merci.

Lucky Luke2
la source
Copie

Réponses:

226

Ce sont des choses différentes. La valeur Délai d'authentification par formulaire définit la durée en minutes pendant laquelle le cookie d'authentification est défini pour être valide, ce qui signifie qu'après un valuecertain nombre de minutes, le cookie expirera et l'utilisateur ne sera plus authentifié - il sera redirigé vers la connexion page automatiquement. La slidingExpiration=truevaleur indique essentiellement que tant que l'utilisateur fait une demande dans le délai d'expiration, il continuera à être authentifié (plus de détails ici ). Si vous définissez, slidingExpiration=falsele cookie d'authentification expirera au bout valuede quelques minutes, que l'utilisateur fasse une demande dans le délai d'expiration ou non.

La SessionStatevaleur du délai d'expiration définit la durée pendant laquelle un fournisseur d'état de session est requis pour conserver les données en mémoire (ou tout autre magasin de sauvegarde utilisé, SQL Server, OutOfProc, etc.) pour une session particulière. Par exemple, si vous placez un objet dans Session en utilisant la valeur de votre exemple, ces données seront supprimées après 30 minutes. L'utilisateur peut encore être authentifié mais les données de la session peuvent ne plus être présentes. La Session Timeoutvaleur est toujours réinitialisée après chaque demande.

Icare
la source
26
Une clarification: le délai d'expiration de l'authentification par formulaire définit le délai d'expiration du ticket pas nécessairement pour le cookie où le ticket peut être stocké. Le cookie peut n'avoir aucun délai d'expiration (appelé de manière confuse un 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 (authentification par formulaire «sans cookie»). Dans le cas d'un cookie persistant, l'authentification par formulaire définit l'expiration du cookie et l'expiration du ticket à la même heure.
bmode
13
Une autre clarification de MSDN: "Pour éviter les performances compromises et pour éviter plusieurs avertissements de navigateur pour les utilisateurs qui ont activé les avertissements de cookie, le cookie est mis à jour lorsque plus de la moitié du temps spécifié s'est écoulé." Ainsi, le délai d'expiration du cookie n'est réinitialisé que s'il est à moitié écoulé. D'où la suggestion de le régler sur 2x le délai d'expiration de la session.
user917170
21

La valeur glissantExpiration = true signifie essentiellement qu'après chaque demande effectuée, le minuteur est réinitialisé et tant que l'utilisateur fait une demande dans le délai d'expiration, 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 est écoulé.

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

Silvan Hofer
la source
18

D'après ce que je comprends, ils sont indépendants les uns des autres. En gardant 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 persistantes après l'expiration de l'authentification (si tel est votre problème, ce qui, je pense, est normal lorsque vous posez cette question. question). Bien sûr, vous devrez gérer manuellement la suppression des variables de session lors de la déconnexion.

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

De guingois
la source
7

La différence est que l'un (délai d'expiration des formulaires) a à voir avec l'authentification de l'utilisateur et l'autre (délai d'expiration de la session) à la durée de stockage des données en cache sur le serveur. Ce sont donc des choses très indépendantes, donc l'une n'a pas priorité sur l'autre.

Karl Anderson
la source
5
      <sessionState timeout="2" />
      <authentication mode="Forms">
          <forms name="userLogin" path="/" timeout="60" loginUrl="Login.aspx" slidingExpiration="true"/>
      </authentication>

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

Shlasasha
la source
1
Cela peut se produire si les informations relatives à la connexion sont stockées dans des variables de session et lorsque cela s'efface, elles redirigent vers la connexion. Cela dépend donc du code?
Steve
0

Pour quiconque tombe sur cette question, reportez-vous à cette documentation de MS - elle contient de très bons détails concernant le paramètre FormsAuthentication Timeout.

Ce document explique en détail le commentaire que fait bmode dans la réponse acceptée - à propos du cookie persistant (session vs expire)

https://docs.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-security/introduction/forms-authentication-configuration-and-advanced-topics-cs#specifying-the-tickets- timeout-value

Naren
la source