¿Se reinicia el tiempo de espera de la sesión de ASP.Net Inproc si se accede al SessionID?
-
05-07-2019 - |
Pregunta
Leí aquí que se restablece una sesión de inproc asp.net es tiempo de espera cada vez que se accede (leer o escribir). Mi pregunta es si el tiempo de espera también se restablece si solo leo el ID de sesión.
Ejemplo: el tiempo de espera de la sesión se establece en 20 min. Después de 15 min. De inactividad cargo una página y leo el Session.SessionID. ¿Seguirá existiendo la sesión después de 10 minutos más?
Y una pregunta más: ¿Importa si la página se carga directamente o se accede a través de AJAX?
Solución
Me parece que estás mezclando dos cosas diferentes: la lectura de un valor desde el estado de la sesión (en código) difiere de adjuntar una instancia de SessionState a la solicitud actual.
A menos que esté muy equivocado, el tiempo de espera no se actualiza cada vez que accede a un objeto Session (nuevamente, en el código), sino que se actualiza cuando se atiende una nueva solicitud. Esto sucede porque el elemento SessionState se agrega a la memoria caché (y se establece la política de caducidad)
Entonces, para responder a tu pregunta: el tiempo de espera no se restablecerá.
Para profundizar en el ejemplo que dio: el tiempo de espera se restablecerá en la carga de la página, en lugar de cuando lea el SessionID en el código.
Otros consejos
El acceso a SessionID no afecta el tiempo de espera de la sesión. Si echas un vistazo con Reflector, la propiedad SessionID (implementada en HttpSessionStateContainer) tiene este aspecto:
public string SessionID
{
get
{
if (this._id == null)
{
this._id = this._stateModule.DelayedGetSessionId();
}
return this._id;
}
}
Que no toca los elementos almacenados subyacentes.
Además, a ese nivel no importa de dónde vino la solicitud (ajax / normal).