2012-02-21 44 views
20

En web.config, establezco el tiempo de espera en el sessionState en 20 minutos. Según MSDN, este tiempo de espera especifica la cantidad de minutos que una sesión puede estar inactiva antes de que se abandone. En IIS 7, DefaultWebSite-> Session State-> Cookie Settings-> Time Out se completa automáticamente con el valor de tiempo de espera establecido en web.config, que en mi caso es de 20 minutos. Además, Application Pools-> DefaultAppPool-> Advanced Settings-> idleTimeout, lo configuro en 10 minutos.¿Cómo funciona el tiempo de espera de la sesión en IIS 7?

Luego hice dos pruebas: Primera prueba: inicié sesión en mi aplicación web a las 3:45 pm, al ralentí durante 10 minutos. A las 3:55 p. M., Traté de usar mi aplicación, me echaron. Creo que el idleTimeout entra en juego.

Segunda prueba: inicié sesión en mi aplicación web a las 4:00 p.m., juego con la aplicación a las 4:05 p.m., a las 4:10 p.m., a las 4:15 p.m. ya las 4:20 p.m. Esperaba que me echasen a las 4:20 p.m. Pero yo no era. Pensé que el tiempo de espera de estado de la sesión (20 minutos) en IIS 7 es la cantidad máxima de tiempo que una sesión de usuario puede estar activa antes de que el Agente web impida al usuario volver a autenticarse. Aparentemente de esta prueba, no lo es. ¿Alguien puede explicarme eso? Además, ¿cómo podría establecer el tiempo de espera para el caso anterior?

Respuesta

34

El tiempo de espera de la sesión es un tiempo de espera que se restablece para un usuario al valor configurado cada vez que visita el servidor.

El tiempo de inactividad de la aplicación entra en acción si no ha habido solicitudes para su aplicación durante ese período de tiempo.

Los escenarios habituales, por tanto, es:

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 el usuario A volviera al sitio después de 12:22 Tendrían una nueva sesión, y cualquier valor que ha almacenado allí previamente habría perdió.

La única manera de garantizar que una sesión persiste sobre los reinicios de la aplicación es configurar un servicio SessionState o estados de sesión SQL, y asegurarse de que tiene configured the machine.key para que no se genere automáticamente cada vez que se reinicie el servidor.

Si está utilizando los mecanismos estándar de ASP.NET para la autenticación, a continuación, ASP.NET se emitirá dos cookies para cada usuario:

  1. Token de autenticación: Controlado por el ajuste Authentication time-out, permite al usuario inicie sesión automáticamente en su sitio si la cookie no ha caducado, esto puede ser fijo o deslizante, y tiene un valor predeterminado de 30 minutos, lo que significa que su token de autenticación puede hacer frente a un período de inactividad más largo que su sesión.
  2. Token de sesión: Controlado por la configuración de tiempo de espera de la sesión, permite que su aplicación almacene y acceda a los valores por usuario durante el tiempo de vida de su visita.

Ambas cookies se cifran utilizando MachineKey, por lo que si la aplicación recicla y genera una nueva clave ninguno de estos tokens se puede descifrar, lo que requiere que el usuario inicie sesión y cree una nueva sesión.


respuesta a las observaciones:

  1. La sesión de 20 minutos de tiempo de espera se refiere a artículos que ha colocado en el objeto de sesión de usuarios (HttpSessionState) usando el método Session.Add(string, object).
  2. Eso depende.Si ha configurado correctamente los configured the machine.key, , los tokens de autenticación seguirán siendo válidos, y si sus sesiones ya no son "InProc", también se mantendrán durante los reinicios de la aplicación y seguirán siendo legibles; consulte las notas anteriores.
+0

pero ¿por qué no tuve que volver a iniciar sesión durante mi segunda prueba? – GLP

+0

Porque cada vez que visita el servidor, el temporizador se reinicia, según mi tabla. –

+0

Gracias Zhaph, todavía tengo dos preguntas, (1) ¿qué afectarán los 20 minutos? (2) ¿B tendrá que volver a iniciar sesión después de que la aplicación se apaga? – GLP

Cuestiones relacionadas