2011-08-19 22 views
5

que tienen la línea:¿Por qué no funciona el tiempo de espera de la sesión cuando se establece en SqlServer?

<sessionState mode="SQLServer" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" /> 

que almacena la sesión en un servidor de estado SQL. Sin embargo, no expira correctamente después de un minuto.

Cuando cambio la línea para utilizar el modo InProc:

<sessionState mode="InProc" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" /> 

Lo hace tiempo de espera después de un minuto.

¿Alguna idea de por qué sucede esto? ¿Cómo puedo esperar que se agote el tiempo de espera al usar SqlServer?

Respuesta

6

Si está utilizando SQL Server Express, es porque no hay un Agente SQL Server para ejecutar el procedimiento DeleteExpiredSessions.

Aquí es una posible solución al problema:

En el procedimiento almacenado que actualiza la sesión, he añadido SQL del procedimiento DeleteExpiredSessions a la sesión de actualización almacenada procedimiento (no puedo recordar el nombre) para que compruebe si hay sesiones antiguas, elimina la sesión anterior y luego actualiza las sesiones actuales. El procedimiento almacenado que actualiza la sesión se ejecuta en cada clic de todos modos, , así que agregué dos líneas más que eliminan las sesiones anteriores antes de que se actualice la sesión . Esto parece que funciona bien.

1

Usted puede ser capaz de controlar el tiempo de espera de la sesión estableciendo el tiempo de espera de la cookie de autenticación de formularios:

FormsAuthenticationTicket authTicket = 
new FormsAuthenticationTicket(1, // version 
txtUserName.Text, 
DateTime.Now, 
DateTime.Now.AddMinutes(1), 
false,@"\"); 

esta forma el usuario pierde el contacto con la sesión después de 1 min.

+0

El tiempo de espera de autenticación de formularios y el tiempo de espera de sesión son dos cosas separadas. – KingOfHypocrites

6
  1. Asegúrese de que el servicio Agente SQL Server se ejecuta

  2. Haga clic derecho en el trabajo del Agente SQL Server denominado ASPState_Job_DeleteExpiredSessions y haga clic en "Ver la Historia" - Asegúrese de que este trabajo se está ejecutando con éxito cada 1 minuto.

En mi caso, de alguna manera (probablemente durante una de las múltiples instalaciones que implican las instancias con nombre) mi Agente SQL Server tenía su conjunto de propiedades Connection -> Alias Localhost Server a sólo el nombre del servidor y no el servidor \ instancia.

Cuando se produjo este cambio, el ASPState_Job_DeleteExpiredSessions pareció ejecutarse indefinidamente y no se pudo detener. Entonces, intenté reiniciar el servicio del Agente SQL Server, pero no se inició la copia de seguridad. Sin embargo, una vez que cambié la propiedad Connection -> Alias Localhost Server a servername \ instancename, el SQL Server Agent comenzó a funcionar nuevamente y el trabajo ASPState_Job_DeleteExpiredSessions comenzó a ejecutarse correctamente una vez por minuto como debería ... y esto obviamente resolvió mi problema de tiempo de espera.

+0

Gracias, esto funcionó para mí –

Cuestiones relacionadas