Le délai d'expiration de la session ASP.Net Inproc est-il réinitialisé si l'accès à SessionID est activé?
-
05-07-2019 - |
Question
J'ai lu ici qu'une session inproc asp.net est réinitialisée son délai d'attente est dépassé à chaque accès (lecture ou écriture). Ma question est la suivante: si le délai d'attente est également réinitialisé si je ne lis que l'identifiant de session?
Exemple: le délai d'expiration de la session est défini sur 20 min. Après 15 min d'inactivité, je charge une page et lis le Session.SessionID. La session existera-t-elle encore après 10 minutes supplémentaires?
Et encore une question: est-ce que cela importe si la page est chargée directement ou accède via AJAX?
La solution
Il me semble que vous mélangez deux choses différentes: La lecture d'une valeur à partir de l'état de la session (en code) diffère de l'attachement d'une instance de SessionState à la demande actuelle.
Sauf erreur de ma part, le délai d'attente n'est pas actualisé à chaque fois que vous accédez à un objet Session (encore une fois, en code), il est actualisé à chaque nouvelle demande. Cela se produit car l'élément SessionState est lui-même ajouté au cache (et la stratégie d'expiration est définie)
Donc, pour répondre à votre question: le délai d'attente ne sera pas réinitialisé.
Pour en savoir plus sur l'exemple que vous avez donné: le délai d'attente sera réinitialisé sur le chargement de la page, plutôt que lorsque vous lisez le code de session dans le code.
Autres conseils
L'accès à SessionID n'affecte pas le délai d'expiration de la session. Si vous jetez un œil à Reflector, la propriété SessionID (implémentée dans HttpSessionStateContainer) se présente comme suit:
public string SessionID
{
get
{
if (this._id == null)
{
this._id = this._stateModule.DelayedGetSessionId();
}
return this._id;
}
}
Qui ne touche pas les éléments stockés sous-jacents.
De plus, à ce niveau, l’origine de la demande importe peu (ajax / normal).