78 votes

La différence entre la Session et HttpContext.Actuel.Session

Quelle est la différence entre la Session et HttpContext.Actuel.Objet de Session?

115voto

Nicholas Carey Points 24614

Avec un peu de retard, voici quelque chose que je viens de découvrir.

@Phillipe Leybaert et @CSharpAtl sont à la fois incorrect. HttpApplications' 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, HttpHandlers 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' HttpApplications' 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;
  }
}

8voto

Philippe Leybaert Points 62715

Il n'y a pas de différence.

La lecture de la Page.Session retourne le contexte de la session.

2voto

CSharpAtl Points 3867

Rien de Session, juste des points de l'actuel HttpContext session.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X