Tiempo de espera de sesión en ASP.NET

163

Estoy ejecutando una aplicación ASP.NET 2.0 en IIS 6.0. Quiero que el tiempo de espera de la sesión sea de 60 minutos en lugar de los 20 minutos predeterminados. He hecho lo siguiente

  1. Establecer <sessionState timeout="60"></sessionState> en web.config.
  2. Establezca el tiempo de espera de la sesión en 60 minutos en el administrador IIS / propiedades del sitio web / configuración de ASP.NET.
  3. Establezca el tiempo de espera inactivo en 60 minutos en las propiedades / rendimiento del grupo de aplicaciones.

Todavía tengo un tiempo de espera de sesión a los 20 minutos. ¿Hay algo más que deba hacer?

klone
fuente
1
Proporcione información sobre cómo midió los 20 minutos. Asegurémonos de que los 20 minutos es un tiempo de espera de sesión, y no de otro tipo.
John Saunders el
11
Marque las respuestas de calidad como aceptadas utilizando la marca de verificación cerca de las flechas de voto a favor / voto a favor
Brian Webster
3
Ocho años después, la respuesta correcta aún no se acepta.
Nathan
Aclare lo que quiere decir con administrador de IIS / propiedades del sitio web / configuración de ASP.NET. Paso a paso, ¿qué cambiaste en IIS?
niico

Respuestas:

275

¿Estás utilizando la autenticación de formularios?

La autenticación de formularios usa su propio valor para el tiempo de espera (30 minutos por defecto). Un tiempo de espera de autenticación de formularios enviará al usuario a la página de inicio de sesión con la sesión aún activa. Esto puede verse como el comportamiento de su aplicación cuando la sesión agota el tiempo de espera, lo que hace que sea fácil confundir uno con el otro.

<system.web>
    <authentication mode="Forms">
          <forms timeout="50"/>
    </authentication>

    <sessionState timeout="60"  />
</system.web>

Establecer el tiempo de espera de los formularios en algo menor que el tiempo de espera de la sesión puede proporcionar al usuario una ventana en la que puede volver a iniciar sesión sin perder ningún dato de la sesión.

HectorMac
fuente
@Inquebrantable en minutos.
Word Reorganizador
44

No sé acerca de web.config o IIS. Pero creo que desde el código C # puedes hacerlo como

Session.Timeout = 60; // 60 is number of minutes
Dmitris
fuente
22
¿Esto solo ajustará el tiempo de espera de la sesión actual? ¿O esto ajustará el tiempo de espera para toda la aplicación?
Johncl
2
Nada en la documentación indica que la configuración Session.Timeoutsea ​​diferente de usar web.config o IIS, por lo que supongo que es para toda la aplicación.
Drasive
Creo que @Drasive tiene razón, pero debe probarse al menos con 2 clientes conectados al servidor y verificar el tiempo de espera de la sesión inactiva.
QMaster
42

Use el siguiente bloque de código en su archivo web.config. Aquí el tiempo de espera predeterminado de la sesión es de 80 minutos.

<system.web>
 <sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>

Use el siguiente enlace para Tiempo de espera de sesión con mensaje de alerta emergente.

Ejemplo de tiempo de espera de sesión

FYI: Los ejemplos anteriores se realizan con el control emergente devexpress, por lo que debe personalizar / reemplazar el control emergente devexpress con el control emergente normal. Si está utilizando devexpress no necesita personalizar

Rama Subba Reddy M
fuente
falso sin galletas?
Kiquenet
3
@Kiquenet, si configuras cookieless en true, tu sessionId se incrustará en la URL, lo que representa un alto riesgo de seguridad. El marco ASP.NET inserta una identificación única en la URL, puede verificar esto deshabilitando la cookie o configurando el atributo sin cookies en verdadero como lo hizo. Según MSDN, de manera predeterminada, el valor de SessionID se almacena en una cookie de sesión que no caduca en el navegador, pero si especifica cookieless = "true", ASP.NET mantiene el estado de sesión sin cookies insertando automáticamente una ID de sesión única en la URL de la página .
Hamza Khanzada
8

¿Tiene algo en machine.config que pueda estar teniendo efecto? Establecer el tiempo de espera de la sesión en web.config debería anular cualquier configuración en IIS o machine.config, sin embargo, si tiene un archivo web.config en algún lugar de una subcarpeta en su aplicación, esa configuración anulará la que está en la raíz de su aplicación.

Además, si recuerdo correctamente, el tiempo de espera en IIS solo afecta a las páginas .asp, no a .aspx. ¿Está seguro de que su código de sesión en web.config es correcto? Debería verse algo así como:

<sessionState
    mode="InProc"
    stateConnectionString="tcpip=127.0.0.1:42424"
    stateNetworkTimeout="60"
    sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
    cookieless="false"
    timeout="60"
/>
Cᴏʀʏ
fuente
8

En mi situación, era el grupo de aplicaciones. Está configurado para reiniciarse cuando está inactivo durante xx minutos. Cuando lo configuro para que no se reinicie, parece usar el valor de Web Config.

Lyords
fuente
Sé que estamos en 2020, pero maldición, esto solo resolvió mi problema, ¡gracias!
Binario9
8

Eso suele ser todo lo que necesitas hacer ...

¿Estás seguro de que después de 20 minutos, la razón por la que se pierde la sesión es por estar inactivo? ...

Hay muchas razones por las cuales la sesión podría borrarse. Puede habilitar el registro de eventos para IIS y luego puede usar el visor de eventos para ver los motivos por los cuales se borró la sesión ... ¿tal vez descubra que es por otros motivos?

También puede leer la documentación de los mensajes de eventos y la tabla de eventos asociada .

davidsleeps
fuente
3

Si está utilizando la autenticación, le recomiendo agregar lo siguiente en el archivo web.config.

En mi caso, los usuarios son redirigidos a la página de inicio de sesión cuando se agota el tiempo de espera:

<authentication mode="Forms">
    <forms defaultUrl="Login.aspx" timeout="120"/>
</authentication>
amar beeharry panray
fuente
Recibí un error aquí <modo de autenticación = "Formularios"> después de colocarlo en web.config
Lst Patrick
2

Desde ASP.Net core 1.0 (vNext o cualquier nombre que se use para ello) las sesiones se implementan de manera diferente. Cambié el valor del tiempo de espera de la sesión en Startup.cs, void ConfigureServicesusando:

services.AddSession(options => options.IdleTimeout = TimeSpan.FromSeconds(42));

O si desea utilizar el appsettings.jsonarchivo, puede hacer algo como:

// Appsettings.json
"SessionOptions": {
    "IdleTimeout": "00:30:00"
}

// Startup.cs
services.AddSession(options => options.IdleTimeout = TimeSpan.Parse(Config.GetSection("SessionOptions")["IdleTimeout"]));
Matty
fuente
2

Puede encontrar la configuración aquí en IIS:

Configuraciones

Se puede encontrar en el nivel del servidor, del sitio web o de la aplicación en "ASP".

Creo que puede configurarlo en el nivel web.config aquí. Por favor confirma esto por ti mismo.

<configuration>
   <system.web>

      <!-- Session Timeout in Minutes (Also in Global.asax) -->
       <sessionState timeout="1440"/>

   </system.web>
</configuration>
Christian Findlay
fuente
¿También en Global.asax?
Kiquenet
1

El valor de tiempo de espera de las sesiones de IIS es solo para aplicaciones .asp clásicas, esto se controla en la configuración de IIS. En su caso Para las aplicaciones ASP.NET, solo se aplica el valor de tiempo de espera especificado por web.config.

Carlos E
fuente
¿Qué pasa con el tiempo de espera del grupo de aplicaciones de IIS?
SteveCav
1

El tiempo de espera predeterminado de la sesión se define en IIS a 20 minutos

Siga los procedimientos a continuación para cada sitio alojado en la web de IIS 8.5

Configuración de tiempo de espera de IIS

Abra el Administrador de IIS 8.5.

Haz clic en el nombre del sitio.

Seleccione "Editor de configuración" en la sección "Administración".

En la lista desplegable "Sección:" en la parte superior del editor de configuración, busque "system.web / sessionState".

Establezca el "tiempo de espera" en "00:20:00 o menos", utilizando el valor más bajo posible según la aplicación. Los valores aceptables son 5 minutos para aplicaciones de alto valor, 10 minutos para aplicaciones de valor medio y 20 minutos para aplicaciones de bajo valor. -valor de aplicaciones.

En el panel "Acciones", haga clic en "Aplicar".

Guicb
fuente
0

si desea tiempo de espera de sesión para el sitio web que eliminar

<authentication mode="Forms">
      <forms timeout="50"/>
</authentication>

etiqueta del archivo web.config.

Nayan Hodar
fuente
-1

La propiedad Timeout especifica el período de tiempo de espera asignado al objeto Session para la aplicación, en minutos. Si el usuario no actualiza o solicita una página dentro del período de tiempo de espera, la sesión finaliza.

IIS 6.0: el valor mínimo permitido es de 1 minuto y el máximo es de 1440 minutos.

Session.Timeout = 600;
Muhammad Awais
fuente
-2

Después de cambiar el valor del tiempo de espera de la sesión en IIS, reinicie amablemente el IIS. Para lograr esto, vaya al símbolo del sistema. Escriba IISRESET y presione enter.

Varun R
fuente
La edición del archivo web.config hace que IIS se restablezca automáticamente.
Timothy Gonzalez