Поделиться через


События состояния сеанса

Обновлен: Ноябрь 2007

Платформа ASP.NET предоставляет два события, с помощью которых можно управлять сеансами пользователей: событие Session_OnStart, происходящее при начале нового сеанса, и событие Session_OnEnd, происходящее при прекращении сеанса или истечении срока действия сеанса.

ms178583.alert_note(ru-ru,VS.90).gifПримечание.

Если файл Global.asax или файл Web.config приложения ASP.NET изменен, приложение будет перезапущено. Если состояние сеанса находится в режиме InProc, все значения, сохраненные в состоянии приложения или состоянии сеанса, будут потеряны. Следует учитывать, что некоторые антивирусные программы могут изменять дату и время последнего изменения файла Global.asax или файла Web.config приложения. Дополнительные сведения о задании режима состояния сеанса см. в разделе Режимы состояний сеанса.

Событие Session_OnStart

Событие Session_OnStart можно обрабатывать, добавив в файл Global.asax процедуру Session_OnStart. Процедура Session_OnStart выполняется в начале запроса, если запрос начинает новый сеанс. Новый сеанс будет начат, если запрос не содержит значения SessionID, или если свойство SessionID, содержащееся в запросе, указывает на сеанс, срок действия которого истек.

Событие Session_OnStart можно использовать как для инициализации переменных сеанса, так и для отслеживания информации, относящейся к сеансу.

Событие Session_OnEnd

Событие Session_OnEnd можно обрабатывать, добавив в файл Global.asax процедуру Session_OnEnd. Процедура Session_OnEnd выполняется при вызове метода Abandon или при истечении срока действия сеанса. Срок действия сеанса истекает по истечении указанного в свойстве Timeout количества минут, в течение которых в сеансе не было запросов.

Событие Session_OnEnd поддерживается только в том случае, если свойство Mode состояния сеанса имеет значение InProc (значение по умолчанию). Если свойство Mode состояния сеанса равно StateServer или SQLServer, событие Session_OnEnd в файле Global.asax игнорируется. Если свойство Mode состояния сеанса равно Custom, то поддержка события Session_OnEnd зависит от настраиваемого поставщика хранилища состояния сеанса.

Событие Session_OnEnd можно использовать для очистки информации, относящейся к сеансу — например, пользовательской информации, отслеживаемой в источнике данных по значению SessionID.

Пример использования событий сеанса

В следующем коде приведен пример процедур Session_OnStart и Session_OnEnd, которые можно добавить в файл Global.asax. Процедуры, определенные в этом примере, создают счетчик, отслеживающий число активных пользователей приложения. Обратите внимание, что данный пример кода будет работать правильно только в том случае, если свойство Mode состояния сеанса имеет значение InProc, так как событие Session_OnEnd поддерживается только для внутрипроцессного хранилища состояния сеанса.

<script language="VB" runat="server">
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#" runat="server">
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