2009-06-02 3 views
69

Session과 HttpContext.Current.Session 개체의 차이점은 무엇입니까?세션과 HttpContext.Current.Session의 차이점

+2

그것은 분명히 가치가 당신이 '세션'말할 때, 당신은 System.Web.UI.Page.Session 언급하는 . Session 개체는 ASP.NET 페이지의 컨텍스트에서 사용할 수 있습니다. – Llyle

답변

7

차이는 없습니다.

Page.Session에 대한 getter는 컨텍스트 세션을 반환합니다.

1

아무것도 아니요. SessionHttpContext.Current.Session을 가리키고 있습니다.

94

조금 늦었지만 여기에 방금 발견 한 내용이 있습니다.

@Phillipe Leybaert 및 @CSharpAtl 모두 잘못되었습니다. HttpApplication 속성의 HttpContext.Current.Session 속성보다 다른 속성의 동작을 나타내는 Session 속성 하나를 사용할 수있는 경우 동일한 HttpSessionState 인스턴스 에 대한 참조를 반환합니다. 현재 요청에 대해 HttpSessionState의 인스턴스가 없을 때 수행하는 작업과 다릅니다.

모두 HttpHandler은 세션 상태를 제공하지 않습니다. 이렇게하려면 HttpHandler 마커 인터페이스 IRequiresSessionState 또는 IReadOnlySessionState 중 하나 또는 둘 모두를 구현해야합니다.

HttpContext.Current.Session은 사용 가능한 세션이없는 경우 null을 반환합니다.

Session 속성의 HttpApplication의 구현은 오히려 null 레퍼런스를 반환하기보다는 메시지 Session state is not available in this context. 함께 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를 가졌습니까? 시간을 내서 정리할 시간이었습니다. 나는 누군가가 줄을 서서 무엇이 계속되고 있는지를 알기 위해 시간을 보낼 필요가 없도록 문서화 할 것이라고 생각했다. –

관련 문제