События состояния сеанса
Обновлен: Ноябрь 2007
Платформа ASP.NET предоставляет два события, с помощью которых можно управлять сеансами пользователей: событие Session_OnStart, происходящее при начале нового сеанса, и событие Session_OnEnd, происходящее при прекращении сеанса или истечении срока действия сеанса.
![]() |
---|
Если файл 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>