Cómo configurar el tiempo de espera de la sesión en web.config

179

He intentado mucho pero no puedo encontrar una solución sobre cómo establecer el valor de tiempo de espera de sesión para la sesión en proceso para una aplicación web ASP.Net.

Estoy usando VSTS 2008 + .Net 3.5 + C #. Esto es lo que escribí yo mismo para establecer el tiempo de espera en 1 minuto, ¿es correcto?

Escribí en la sección system.web en el web.config

<sessionState timeout="1" mode="InProc" />
George2
fuente
55
La forma en que define el tiempo de espera es correcta. ¿Tienes algún problema con eso?
Darin Dimitrov
77
¿Sabes que esto significa que caducará después de 1 minuto de inactividad, no después de 1 minuto desde su inicio? Supongo que si está haciendo esta pregunta y ha escrito correctamente el tiempo de espera, puede ser engañoso sobre cómo funciona.
Ivan Zlatanov
1
Necesito establecer un tiempo inactivo, es justo lo que necesito. Gracias Ivan!
George2
Jajaja No recomendaría establecer el tiempo de espera en solo 1 minuto. Eso va a matar la usabilidad!
Brian McCarthy
3
Entiendo completamente la necesidad de un corto período de tiempo de espera. En mi caso, es para probar la usabilidad del sitio si la sesión se agota y cómo reacciona una vez que el usuario regresa. Es difícil probar eso mientras se depura a menos que el tiempo de espera de la sesión ocurra rápidamente
Brett Weber

Respuestas:

323

Si desea establecer el tiempo de espera en 20 minutos, use algo como esto:

    <configuration>
      <system.web>
         <sessionState timeout="20"></sessionState>
      </system.web>
    </configuration>
Wolfwyrd
fuente
16
20 minutos u horas? (timeout = "20")
Muhammad Awais
21
Config indica el tiempo de espera en minutos, por lo que 20 minutos
Wolfwyrd
50

El valor que está configurando en el timeoutatributo es una de las formas correctas de configurar el valor de tiempo de espera de la sesión.

El timeoutatributo especifica la cantidad de minutos que una sesión puede estar inactiva antes de que se abandone. El valor predeterminado para este atributo es 20.

Al asignar un valor de 1 a este atributo, ha establecido que la sesión se abandone en 1 minuto después de su inactividad.

Para probar esto, cree una página aspx simple y escriba este código en el evento Page_Load,

Response.Write(Session.SessionID);

Abre un navegador y ve a esta página. Se imprimirá una identificación de sesión. Espere un minuto para pasar, luego presione actualizar. La identificación de la sesión cambiará.

Ahora, si mi suposición es correcta, desea que sus usuarios cierren sesión tan pronto como finalice la sesión. Para hacer esto, puede armar una página de inicio de sesión que verificará las credenciales del usuario y creará una variable de sesión como esta:

Session["UserId"] = 1;

Ahora, tendrá que realizar una verificación en cada página para esta variable como esta:

if(Session["UserId"] == null)
    Response.Redirect("login.aspx");

Este es un ejemplo básico de cómo funcionará esto.

Pero, para que sus aplicaciones de calidad de producción sean seguras, use las clases Roles y Membresía proporcionadas por ASP.NET. Proporcionan autenticación basada en formularios que es mucho más confiable que la autenticación basada en sesión normal que está tratando de usar.

Kirtan
fuente
Gran consejo ... Asegúrese de establecer primero una variable de sesión antes de probar con Response.Write (Session.SessionID); de lo contrario, se actualizará con una nueva ID cada vez que actualice.
Chris Catignani
1

Si está utilizando MVC, lo coloca en el archivo web.config en el directorio raíz de la aplicación web, no en el archivo web.config en el directorio Vistas. También debe estar EN el nodo system.web, no debajo de lo que George2 dijo en su pregunta: "Escribí en la sección system.web en web.config"

El valor del parámetro de tiempo de espera representa minutos.

Hay otros atributos que se pueden establecer en el elemento sessionState. Puede encontrar información aquí: docs.microsoft.com sessionState

<configuration>
   <system.web>
      <sessionState timeout="20"></sessionState>
   </system.web>
</configuration>

Luego puede ver el comienzo de una nueva sesión en el archivo Global.asax agregando el siguiente método:

void Session_Start(object sender, EventArgs e)
{
    if (Session.IsNewSession)
    {
        //do things that need to happen
        //when a new session starts.
    }
}
Keith Aymar
fuente
0

Use esto en web.config:

<sessionState 

  timeout="20" 
/>
Balaji Birajdar
fuente
30
No necesita la mayoría de los atributos que enumera, en timeoutrealidad. stateConnectionStringy sqlConnectionStringse ignoran cuando mode="InProc", y los valores para modey cookielessse establecen en sus valores predeterminados. Entonces, esto realmente se resume en la respuesta de Wolfwyrd.
arcain
0

Si no funciona web.config, debe configurarlo desde IIS.

Asif Jan
fuente