2009-06-02 156 views
69

SessionとHttpContext.Current.Sessionオブジェクトの違いは何ですか?セッションとHttpContext.Current.Sessionの違い

+2

あなたの「セッション」を言うとき、あなたはSystem.Web.UI.Page.Sessionに言及していることを明らかに価値があります。 Sessionオブジェクトは、ASP.NETページのコンテキスト内で使用できます。 – Llyle

答えて

7

違いはありません。

Page.Sessionのゲッターは、コンテキストセッションを返します。

1

何もありません。 SessionHttpContext.Current.Sessionを指しています。

94

少し遅れていますが、ここで私が発見したものがあります。

@Phillipe Leybaertと@CSharpAtlは両方とも正しくありません。 HttpApplicationSessionプロパティは、プロパティHttpContext.Current.Sessionのプロパティとは異なる動作を示します。が利用可能であれば、同じHttpSessionStateインスタンスへの参照を返します。現在のリクエストで利用可能なインスタンスがない場合、彼らは何をするのかは異なります。HttpSessionState

すべてHttpHandlerはセッション状態を提供しません。これを行うには、HttpHandlerはマーカーインターフェイスIRequiresSessionStateまたはIReadOnlySessionStateのいずれかまたは両方を実装する必要があります。

HttpContext.Current.Sessionは、利用可能なセッションがない場合はnullを返します。 Session性の

HttpApplicationの実装では、メッセージSession state is not available in this context.なくnull参照を返すとHttpExceptionをスロー。

セッションを実装していないHttpHandlerの例には、イメージやCSSファイルなどの通常の静的リソースのデフォルトのハンドラがあります。そのような場合(global.asaxイベントハンドラの場合)HttpApplicationSessionプロパティへの参照は、HttpExceptionがスローされます。

予期しない予告なしにHttpExceptionがWTFを提供しますか?あなたがそれを期待していないなら、瞬間。 HttpApplicationクラスの

Sessionプロパティが(リフレクターから)ので、実装されています。

[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; 
    } 
} 
+6

より良い答えを記入するように努力してくれてありがとう。 – nicodemus13

+7

問題ありません。私はちょうど迷惑なWTFを持っていた?整理するのに時間がかかった瞬間。私はそれを文書化して、他の誰かが行こうとしていることが何が起こっているのかを考え出す時間を費やす必要はないと考えました。 –

関連する問題