Comment fonctionne le délai d'attente de session dans IIS 7?

Dans le web.config, je mets timeout dans le sessionState à 20 minutes. Selon MSDN, ce délai spécifie le nombre de minutes qu'une session peut être inactive avant d'être abandonnée. Dans IIS 7, DefaultWebSite->Session State->Cookie Settings - > Time Out est automatiquement rempli avec la valeur de délai définie dans web.config, qui dans mon cas est de 20 minutes. En outre, les Pools D'applications - > DefaultAppPool- > Paramètres avancés - > idleTimeout, Je l'ai mis à 10 minutes.

Ensuite, j'ai fait deux tests: Premier test: je me suis connecté dans mon application web à 3: 45pm, au ralenti pendant 10 minutes. À 3: 55pm, j'ai essayé d'utiliser mon application, j'ai été expulsé. Je pense que l'idleTimeout entre en jeu.

Deuxième test: j'ai connecté mon application web à 4:00pm, jouer avec l'app à 4:05pm, 4:10pm, 4:15pm et 4:20pm. Je m'attendais à être expulsé à 16h20. Mais je n'étais pas. Je pensais que le délai d'attente de l'état de la session (20min) dans IIS 7 est le temps maximum qu'une session utilisateur peut être active avant que L'Agent Web ne défie l'utilisateur de se ré-authentifier. Apparemment a partir de ce test, il n'est pas. Quelqu'un peut-il m'expliquer? Aussi, comment pourrais-je définir le délai d'attente pour le cas ci-dessus?

22
demandé sur Zhaph - Ben Duguid 2012-02-22 01:48:02

1 réponses

Session time-out est un délai d'attente coulissant qui est réinitialisé pour un utilisateur à la valeur configurée chaque fois qu'il visite le serveur.

Le délai D'inactivité de L'Application débute s'il n'y a pas eu de demandes à votre application pendant cette période.

Les scénarios habituels sont donc:

Time  | User A       | User B       | Session States
------+--------------+--------------+-------------------------------------------
12:00 | Visits Page1 |              | A: New Session, Time-out: 20 minutes
12:02 | Visits Page2 |              | A: Time-out reset: 20 minutes
12:10 |              | Visits Page1 | A: Time-out: 12 min; B: New: 20 minutes
12:15 |              | Visits Page2 | A: Time-out: 07 min; B: Time-out: 20 min
12:22 |              |              | A: times out; B: 13 min remaining
12:32 |              |              | Application Shuts Down (Idle time reached)
12:35 | Visits Page3 |              | A: New Session Starts

Si L'Utilisateur A devait revenir sur le site après 12: 22, Il aurait une toute nouvelle session, et toutes les valeurs que vous y avez stockées précédemment seraient perdues.

La seule façon de assurez - vous qu'une session persiste lors du redémarrage de l'application est de configurer un service sessionState ou des États de Session SQL, et assurez-vous que vous avez configuré la machine.key donc ce n'est pas généré automatiquement chaque fois que le serveur redémarre.

Si vous utilisez la norme ASP.NET mécanismes d'authentification, puis ASP.NET will émettra deux cookies à chaque utilisateur:

  1. jeton D'authentification: contrôlé par le paramètre délai D'authentification , permet utilisateur à être connecté automatiquement à votre site si le cookie n'a pas expiré, cela peut être corrigé ou glissant, et par défaut à 30 minutes, ce qui signifie que leur jeton d'authentification peut faire face à une période "d'inactivité" plus longue que leur session.
  2. jeton de Session: contrôlé par le paramètre Session Time-out, permet à votre application de stocker et d'accéder aux valeurs par utilisateur pendant la durée de leur visite.

Ces deux cookies sont cryptés à L'aide de MachineKey-donc si votre application recycle et génère une nouvelle clé, aucun de ces jetons ne peut être déchiffré, obligeant l'utilisateur à se connecter et à créer une nouvelle session.


Répondre aux commentaires:

  1. le délai d'expiration de session de 20 minutes concerne les éléments que vous avez placés dans l'objet session des utilisateurs (HttpSessionState) en utilisant la méthode Session.Add(string, object).
  2. ça dépend. Si vous avez correctement configuré la machine.clé, les jetons d'authentification seront toujours valides, et si vos plus "InProc" ceux - ci persisteront également à travers les redémarrages de l'application et seront toujours lisibles - voir les notes ci-dessus.
35
répondu Zhaph - Ben Duguid 2012-02-22 15:19:49