Share via


工作階段狀態事件

更新:2007 年 11 月

ASP.NET 提供兩個可幫助您管理使用者工作階段 (Session) 的事件:Session_OnStart 事件 (會在開始新的工作階段時引發),和 Session_OnEnd 事件 (會在工作階段被放棄或到期時引發)。

注意事項:

如果修改了 ASP.NET 應用程式的 Global.asax 檔案或 Web.config 檔案,就會重新啟動應用程式。如果目前的工作階段狀態模式為 InProc,將會遺失任何儲存在應用程式狀態或工作階段狀態中的值。請留意某些防毒軟體可能會更新應用程式之 Global.asax 或 Web.config 檔的最後修改日期和時間。如需設定工作階段狀態模式的詳細資訊,請參閱工作階段狀態模式

Session_OnStart 事件

您可以將名稱為 Session_OnStart 的副程式加入至 Global.asax 檔案,即可處理 Session_OnStart 事件。如果要求開始新的工作階段,Session_OnStart 副程式會在要求的開頭處執行。如果產生不含 SessionID 值的要求或者要求中包含的 SessionID 屬性 (Property) 參考已到期的工作階段,將會啟動新的工作階段。

您可以使用 Session_OnStart 事件來初始化工作階段變數,並追蹤與工作階段相關的資訊。

Session_OnEnd 事件

您可以將名稱為 Session_OnEnd 的副程式加入至 Global.asax 檔案,即可處理 Session_OnEnd 事件。Session_OnEnd 副程式會在已呼叫 Abandon 方法或工作階段已到期時執行。當超過 Timeout 屬性所指定的分鐘數而沒有對工作階段產生要求時,工作階段就會逾時。

只有在工作階段狀態 Mode 屬性設定為 InProc 時 (這是預設),才會支援 Session_OnEnd 事件。如果工作階段狀態 ModeStateServerSQLServer,將忽略 Global.asax 檔案中的 Session_OnEnd 事件。如果工作階段狀態 Mode 設定為 Custom,則 Session_OnEnd 事件的支援是由自訂工作階段狀態存放區提供者決定。

您可以使用 Session_OnEnd 事件清除工作階段相關的資訊,例如以 SessionID 值在資料來源中追蹤的使用者資訊。

工作階段事件範例

下列程式碼範例會示範您可以加入至 Global.asax 檔案的 Session_OnStart 和 Session_OnEnd 副程式範例。在這個範例中定義的副程式會建立計數器,這個計數器會記錄正在使用應用程式的應用程式使用者數目。請注意,只有在工作階段狀態 Mode 屬性設定為 InProc 時,這個範例才會正常運作 (因為 Session_OnEnd 事件僅支援於同處理序 (In-Process) 工作階段狀態儲存區)。

<script language="VB" >
Public Sub Application_OnStart()
  Application("UsersOnline") = 0
End Sub

Public Sub Session_OnStart()
  Application.Lock()
  Application("UsersOnline") = CInt(Application("UsersOnline")) + 1
  Application.UnLock()
End Sub

Public Sub Session_OnEnd()
  Application.Lock()
  Application("UsersOnline") = CInt(Application("UsersOnline")) - 1
  Application.UnLock()
End Sub
</script>
<script language="C#" >
public void Application_OnStart()
{
  Application["UsersOnline"] = 0;
}

public void Session_OnStart()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
  Application.UnLock();
}

public void Session_OnEnd()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
  Application.UnLock();
}
</script>

請參閱

概念

ASP.NET 工作階段狀態概觀

ASP.NET 狀態管理概觀