SessionStateUtility.RaiseSessionEnd 方法

定義

執行在 ASP.NET 應用程式的 Global.asax 檔案中所定義的 Session_OnEnd 事件。

public:
 static void RaiseSessionEnd(System::Web::SessionState::IHttpSessionState ^ session, System::Object ^ eventSource, EventArgs ^ eventArgs);
public static void RaiseSessionEnd (System.Web.SessionState.IHttpSessionState session, object eventSource, EventArgs eventArgs);
static member RaiseSessionEnd : System.Web.SessionState.IHttpSessionState * obj * EventArgs -> unit
Public Shared Sub RaiseSessionEnd (session As IHttpSessionState, eventSource As Object, eventArgs As EventArgs)

參數

session
IHttpSessionState

已結束之工作階段的 IHttpSessionState 實作執行個體。

eventSource
Object

提供給 Session_OnEnd 事件的事件來源物件。

eventArgs
EventArgs

提供給 Session_OnEnd 事件的 EventArgs 物件。

範例

下列程式碼範例顯示自訂會話狀態模組中事件的處理常式 ReleaseRequestState 。 如果會話已放棄,模組會使用 RaiseSessionEnd 方法,執行應用程式在 Global.asax 檔案中定義的Session_OnEnd事件。 此程式碼範例是提供給 類別之較大範例的 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

備註

會話 RaiseSessionEnd 狀態模組會使用 方法來執行 ASP.NET 應用程式之 Global.asax 檔案中定義的 Session_OnEnd 事件。 會話狀態模組會在會話已放棄或會話到期時呼叫 RaiseSessionEnd 方法。

適用於