Почему событие Session_End не возникает, если StateProvider не является InProc?

Asked
Viewd7793

5

Я задаю этот вопрос из любопытства.

Я заметил это в своем global.asax

 void Session_End(object sender, EventArgs e)
{
    // Code that runs when a session ends. 
    // Note: The Session_End event is raised only when the sessionstate mode
    // is set to InProc in the Web.config file. If session mode is set to StateServer 
    // or SQLServer, the event is not raised.
}
 

Я хочу понять, почему событие Session_End не фиксируется / не возникает, когда режим сеанса - StateServer или SQLServer?

2 ответов

9

потому что состояние сеанса ASP.NET больше не в памяти ...

при использовании другого процесса для хранения состояния сеанса IIS не знает (поскольку он не связан, состояние сеанса больше не сохраняется IIS), когда сеанс заканчивается. .

это вызвано тем, что тайм-ауты, я никогда не пробовал, но возникает ли это событие, когда вы программно вызываете Session.Abandon () ??

2

Событие Session_End поддерживается только диспетчером сеансов InProc:

События состояния сеанса ASP.NET (MSDN)

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

В этой статье объясняется, как использовать HttpModule для эмуляции этой функции:

ASP.NET HttpModule для обработки завершения сеанса с помощью StateServer (CodeProject)