Язык

SessionStateUtility.GetHttpSessionStateFromContext(HttpContext) Метод

Определение

Извлекает данные сеанса из контекста текущего запроса.

public:
 static System::Web::SessionState::IHttpSessionState ^ GetHttpSessionStateFromContext(System::Web::HttpContext ^ context);
public static System.Web.SessionState.IHttpSessionState GetHttpSessionStateFromContext(System.Web.HttpContext context);
static member GetHttpSessionStateFromContext : System.Web.HttpContext -> System.Web.SessionState.IHttpSessionState
Public Shared Function GetHttpSessionStateFromContext (context As HttpContext) As IHttpSessionState

Параметры

context
HttpContext

Из HttpContext которого извлекаются данные сеанса.

Возвращаемое значение

Экземпляр IHttpSessionState реализации, заполненный данными сеанса из текущего запроса.

Примеры

В следующем примере кода показан обработчик ReleaseRequestState события в пользовательском модуле состояния сеанса. Модуль извлекает данные сеанса из HttpContext текущего запроса с помощью GetHttpSessionStateFromContext метода. Этот пример кода является частью более крупного примера, предоставленного для SessionStateUtility класса.

//
// Event handler for HttpApplication.ReleaseRequestState
//

private void OnReleaseRequestState(object source, EventArgs args)
{
    HttpApplication app = (HttpApplication)source;
    HttpContext context = app.Context;
    string sessionID;

    // Read the session state from the context
    HttpSessionStateContainer stateProvider =
      (HttpSessionStateContainer)(SessionStateUtility.GetHttpSessionStateFromContext(context));

    // If Session.Abandon() was called, remove the session data from the local Hashtable
    // and execute the Session_OnEnd event from the Global.asax file.
    if (stateProvider.IsAbandoned)
    {
        try
        {
            pHashtableLock.AcquireWriterLock(Int32.MaxValue);

            sessionID = pSessionIDManager.GetSessionID(context);
            pSessionItems.Remove(sessionID);
        }
        finally
        {
            pHashtableLock.ReleaseWriterLock();
        }

        SessionStateUtility.RaiseSessionEnd(stateProvider, this, EventArgs.Empty);
    }

    SessionStateUtility.RemoveHttpSessionStateFromContext(context);
}
'
' Event handler for HttpApplication.ReleaseRequestState
'
Private Sub OnReleaseRequestState(ByVal [source] As Object, ByVal args As EventArgs)
    Dim app As HttpApplication = CType([source], HttpApplication)
    Dim context As HttpContext = app.Context
    Dim sessionID As String

    ' Read the session state from the context
    Dim stateProvider As HttpSessionStateContainer = _
       CType(SessionStateUtility.GetHttpSessionStateFromContext(context), HttpSessionStateContainer)

    ' If Session.Abandon() was called, remove the session data from the local Hashtable
    ' and execute the Session_OnEnd event from the Global.asax file.
    If stateProvider.IsAbandoned Then
        Try
            pHashtableLock.AcquireWriterLock(Int32.MaxValue)

            sessionID = pSessionIDManager.GetSessionID(context)
            pSessionItems.Remove(sessionID)
        Finally
            pHashtableLock.ReleaseWriterLock()
        End Try

        SessionStateUtility.RaiseSessionEnd(stateProvider, Me, EventArgs.Empty)
    End If

  SessionStateUtility.RemoveHttpSessionStateFromContext(context)
End Sub

Комментарии

Этот GetHttpSessionStateFromContext метод можно использовать модулем состояния сеанса для получения данных сеанса из текущего запроса. Это происходит во время события в ReleaseRequestState конце запроса. Затем возвращаемые данные сеанса можно записать в хранилище данных сеанса. Если сеанс был отменен, данные сеанса можно удалить из хранилища данных и HttpContextSession_OnEnd событие можно выполнить.

Примечания для тех, кто наследует этот метод

Метод можно использовать RemoveHttpSessionStateFromContext(HttpContext) для удаления данных сеанса из внутреннего хранилища и RaiseSessionEnd(IHttpSessionState, Object, EventArgs) метода для вызова Session_OnEnd события.

Применяется к