2009-03-09 3 views
0

J'ai lu here qu'une session inproc asp.net réinitialise son timeout chaque fois qu'il est accédé (lire ou écrire). Ma question est, si le délai d'attente est également réinitialisé si je lis seulement le sessionID?Le délai d'attente de la session ASP.Net Inproc est-il réinitialisé si l'ID de session est accédé?

Exemple: Le délai d'attente de session est défini sur 20 min. Après 15 min. d'inactivité, je charge une page et lit Session.SessionID. La session continuera-t-elle après 10 minutes de plus?

Et encore une question: Est-ce important si la page est chargée directement ou accède via AJAX?

Répondre

2

Il me semble que vous mélangez deux choses différentes: Lire une valeur de l'état de session (en code) diffère de l'attachement d'une instance de SessionState à la demande en cours. À moins de me tromper, le délai d'attente n'est pas actualisé lorsque vous accédez à un objet Session (encore une fois, dans le code), il est plutôt actualisé lorsqu'une nouvelle requête est diffusée. 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 élaborer sur l'exemple que vous avez donné: Le délai d'attente sera réinitialisé sur le charger de la page, plutôt que lorsque vous lisez le SessionID dans le code.

+0

Yup, cela frappe totalement la place :-) –

+0

Peut-être pas ... pas de vote pour l'instant! :-(;-) – Cerebrus

1

L'accès à SessionID n'affecte pas le délai d'expiration de la session. Si vous prenez un coup d'oeil avec réflecteur, la propriété SessionID (mis en œuvre HttpSessionStateContainer) ressemble à ceci:

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, peu importe d'où vient la requête (ajax/normal).