Quelle est la différence entre la Session et HttpContext.Actuel.Objet de Session?
Réponses
Trop de publicités?Avec un peu de retard, voici quelque chose que je viens de découvrir.
@Phillipe Leybaert et @CSharpAtl sont à la fois incorrect. HttpApplication
s' Session
de la propriété des expositions comportement différent que celui de la proporty HttpContext.Current.Session
. Ils seront à la fois renvoyer une référence à la même HttpSessionState
exemple si l'on est disponible. Ils diffèrent en ce qu'ils font quand il n'y a aucune instance de HttpSessionState disponible pour la requête en cours.
Pas tous, HttpHandler
s de fournir l'état de la session. Pour ce faire, l' HttpHandler
doit mettre en œuvre [un ou les deux?] le marqueur d'interfaces IRequiresSessionState
ou IReadOnlySessionState
.
HttpContext.Current.Session
simplement les retours null
si il n'y a pas de session disponible.
L' HttpApplication
's la mise en œuvre de la Session de la propriété jette un HttpException
avec le message d' Session state is not available in this context.
plutôt que de retourner un null
de référence.
Quelques exemples de HttpHandlers qui n'implémentent pas de session sont les gestionnaires par défaut pour normalement les ressources statiques, tels que les images et la CSS de fichiers. Toute référence à l' HttpApplication
s' Session
propriété dans de tels cas (comme en global.asax
des gestionnaires d'événements) entraînera une HttpException être jeté.
Inutile de dire que, de l'inattendu HttpExcetpion fournit un WTF?! moment si vous n'êtes pas l'attendre.
L' Session
de la propriété de l' HttpApplication
classe est implémentée ainsi (à partir de Réflecteur):
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public HttpSessionState Session
{
get
{
HttpSessionState session = null;
if (this._session != null)
{
session = this._session;
}
else if (this._context != null)
{
session = this._context.Session;
}
if (session == null)
{
throw new HttpException(SR.GetString("Session_not_available"));
}
return session;
}
}