La différence entre la Session et HttpContext.Actuel.Session
Quelle est la différence entre la Session et HttpContext.Actuel.Objet de Session?
- Il convient de préciser que lorsque vous dites "session", vous faites référence au Système.Web.L'INTERFACE utilisateur.Page.Session. L'objet Session est disponible à l'intérieur du contexte de la ASP.NET page.
Vous devez vous connecter pour publier un commentaire.
Un peu de retard, voici quelque chose que je viens de découvrir.
@Phillipe Leybaert et @CSharpAtl sont à la fois incorrect.
HttpApplication
'sSession
propriété des expositions comportement différent que celui de la propriétéHttpContext.Current.Session
. Ils seront à la fois renvoyer une référence à la mêmeHttpSessionState
instance si l'on est disponible. Ils diffèrent en ce qu'ils font quand il n'y a aucune instance deHttpSessionState
disponible pour la demande actuelle.Pas tous
HttpHandler
de fournir l'état de la session. Pour ce faire, leHttpHandler
doit mettre en œuvre [un ou les deux?] le marqueur d'interfacesIRequiresSessionState
ouIReadOnlySessionState
.HttpContext.Current.Session
retourne simplementnull
si il n'y a pas de session disponible.La
HttpApplication
's la mise en œuvre de laSession
propriété jette unHttpException
avec le messageSession state is not available in this context.
plutôt que de retourner unenull
de référence.Quelques exemples de
HttpHandler
qui n'implémentent pas de session par défaut sont les gestionnaires pour normalement les ressources statiques, tels que les images et la CSS de fichiers. Toute référence à laHttpApplication
'sSession
propriété dans de tels cas (comme dansglobal.asax
gestionnaires d'événements) entraînera uneHttpException
être jeté.Inutile de dire que, de l'inattendu
HttpException
fournit un WTF?! moment si vous n'êtes pas l'attendre.La
Session
propriété de laHttpApplication
classe est implémentée ainsi (à partir de Réflecteur):Il n'y a pas de différence.
De la lecture de la Page.Session retourne le contexte de la session.
Rien.
Session
juste des points à l'HttpContext.Current.Session
.en Interne, Page.Session points de C'est HttpContext.Actuel.Session seulement, mais il ya encore deux différences en fonction de l'endroit où il est appelé.
Page.Session peuvent être accessibles qu'à partir de classes héritées du Système.Web.L'INTERFACE utilisateur.Page et qu'il va jeter HttpException lors de l'accès à partir de WebMethod.
Où que HttpContext.Actuel.Session peut être consulté à partir de n'importe où tant que vous êtes en cours d'exécution dans le contexte d'une application web.
Autre différence importante, où vous pouvez accéder à la Page.Session mais ne peut pas accéder à HttpContext.Actuel.Session :
Si il y a une méthode nommée GetData dans votre page(héritée de Système.Web.L'INTERFACE utilisateur.Page), qui est exécutée simultanément dans différents threads à partir d'une autre page, la méthode, la méthode GetData pouvez accéder à la Page.Seession, mais vous ne pouvez pas accéder HttpContext.Actuel.Session.
C'est parce que GetData a été appelée à partir de différents thread afin HttpContext.Le courant est nul et HttpContext.Actuel.Session jeter référence nulle exception, mais la Page.La Session sera encore attaché à l'objet de page si la page méthode GetData pouvez accéder à la Page.Session.