programing

세션과 HttpContext 간의 차이입니다.현재의.세션

i4 2023. 7. 15. 09:40
반응형

세션과 HttpContext 간의 차이입니다.현재의.세션

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

조금 늦었지만, 여기 제가 방금 발견한 것이 있습니다.

@Phillip Leybaert와 @CSSharpAtl은 모두 올바르지 않습니다. HttpApplicationSession재산은 재산과 다른 행동을 보입니다.HttpContext.Current.Session둘 다 동일한 항목에 대한 참조를 반환합니다.HttpSessionState가능한 경우 인스턴스(instance).그들은 그들이 하는 일에 있어서 다른 것들의 예가 없습니다.HttpSessionState현재 요청에 사용할 수 있습니다.

전부는 아닙니다.HttpHandler세션 상태를 제공합니다.이를 위해,HttpHandler [하나 또는 둘 다?] 마커 인터페이스를 구현해야 합니다.IRequiresSessionState또는IReadOnlySessionState.

HttpContext.Current.Session단순 신고null사용 가능한 세션이 없는 경우

HttpApplication의 구현Session재산이 재산을 던집니다.HttpException전언과 함께Session state is not available in this context.반품하는 것보다null언급.

의 몇 가지 예HttpHandler세션을 구현하지 않는 것은 이미지 및 CSS 파일과 같은 일반적으로 정적인 리소스에 대한 기본 처리기입니다.에 대한 모든 참조HttpApplicationSession그러한 경우의 재산(에 있는 것과 같은)global.asax이벤트 핸들러)가 발생합니다.HttpException내던져진

말할 필요도 없이, 예상치 못한 일이HttpExceptionWTF를 제공합니까?!당신이 예상하지 못한 순간.

Session의 재산.HttpApplication클래스는 다음과 같이 구현됩니다(Reflector에서).

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

차이가 없습니다.

페이지를 위한 게터.세션이 컨텍스트 세션을 반환합니다.

아무 것도 없어요. Session단지 그것을 가리킵니다.HttpContext.Current.Session.

내부적으로, 페이지.세션은 It's HttpContext를 가리킵니다.현재의.세션만 해당되지만, 호출 위치에 따라 두 가지 차이점이 있습니다.

Page.Session은 System에서 상속된 클래스에서만 액세스할 수 있습니다.Web.UI.Page를 사용하면 WebMethod에서 액세스할 때 HttpException이 느려집니다.
여기서 HttpContext입니다.현재의.웹 응용프로그램의 컨텍스트에서 실행되는 동안에는 어디서나 세션에 액세스할 수 있습니다.


페이지에 액세스할 수 있는 기타 중요한 차이점.세션이지만 HttpContext에 액세스할 수 없습니다.현재의.세션:

페이지에 GetData라는 메서드가 있는 경우(System에서 상속됨).다른 페이지 메서드와 다른 스레드에서 동시에 실행되는 Web.UI.Page), GetData 메서드는 페이지에 액세스할 수 있습니다.세션, 그러나 HttpContext에 액세스할 수 없습니다.현재의.세션.

다른 스레드에서 GetData를 호출했기 때문에 HttpContext입니다.HttpContext는 null입니다.에서 예외를 페이지입니다.세션에서 null 참조 예외를 발생시키지만 페이지입니다.페이지 메서드 GetData가 페이지에 액세스할 수 있도록 세션이 페이지 개체와 계속 연결됩니다.세션.

언급URL : https://stackoverflow.com/questions/940742/difference-between-session-and-httpcontext-current-session

반응형