tag net asp asp.net iis-7 timeout session-state

asp.net - net - iis session timeout



¿Cómo funciona el tiempo de espera de sesión en IIS 7? (1)

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

El tiempo de espera de inactividad de la aplicación se activa si no ha habido solicitudes para su aplicación durante ese período de tiempo.

Los escenarios habituales son por lo tanto:

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 regresara al sitio después de las 12:22, tendría una sesión completamente nueva y cualquier valor que haya almacenado allí anteriormente se perdería.

La única manera de asegurarse de que una sesión persista durante los reinicios de la aplicación es configurar un servicio SessionState o un estado de sesión SQL, y asegurarse de que haya configurado la clave 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, ASP.NET emitirá dos cookies para cada usuario:

  1. Token de autenticación: controlado por la configuración del tiempo de espera de autenticación , permite al usuario iniciar sesión automáticamente en su sitio si la cookie no ha caducado, esto puede ser fijo o deslizante, y el valor predeterminado es de 30 minutos, lo que significa que su token de autenticación puede hacer frente a un período "inactivo" más largo que su sesión.
  2. Token de sesión: controlado por la configuración del Tiempo de espera de sesión, le permite a su aplicación almacenar y acceder a los valores por usuario durante la vida útil de su visita.

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

Respondiendo a los comentarios:

  1. El tiempo de espera de la sesión de 20 minutos se relaciona con los elementos que ha colocado en el objeto de sesión de los usuarios ( HttpSessionState ) utilizando el método Session.Add(string, object) .
  2. Eso depende. Si ha configurado correctamente la clave machine.key , los tokens de autenticación seguirán siendo válidos, y si sus sesiones ya no son "InProc", éstas también persistirán durante los reinicios de la aplicación y seguirán siendo legibles, consulte las notas anteriores.

En web.config, establezco el tiempo de espera en el estado de sesión en 20 minutos. Según MSDN, este tiempo de espera especifica el número de minutos que una sesión puede estar inactiva antes de abandonarse. En IIS 7, DefaultWebSite-> Session State-> Cookie Settings-> Time Out se completa automáticamente con el valor de timeout establecido en web.config, que en mi caso es de 20 minutos. Además, Grupos de aplicaciones-> DefaultAppPool-> Configuración avanzada-> idleTimeout, lo configuro en 10 minutos.

Luego hice dos pruebas: Primera prueba: inicié sesión en mi aplicación web a las 3:45 pm, inactiva durante 10 minutos. A las 3:55 pm, 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 pm, juego con la aplicación a las 4:05 pm, 4:10 pm, 4:15 pm y 4:20 pm. Esperaba que me echaran a las 4:20 pm. Pero yo no estaba. Pensé que el tiempo de espera del estado de la sesión (20min) 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 rete al usuario a que vuelva a autenticarse. Al parecer de esta prueba, no lo es. ¿Alguien me puede explicar eso? Además, ¿cómo podría establecer el tiempo de espera para el caso anterior?