Я использую веб-сайт ASP.NET на своем компьютере для разработки (.NET 2.0 в Vista / IIS7).
Метод Session_Start в global.asax.cs регистрирует каждый вызов файла (log4net).
Метод Session_End также регистрирует каждый вызов.
Я использую состояние сеанса InProc и устанавливаю время ожидания сеанса на 5 минут (чтобы избежать ожидания в течение 20 минут).
Я зашел на сайт, подожди 5 минут, я увижу журнал Session_End. Тогда я F5 сайт. В браузерах по-прежнему есть сеансовый файл cookie и он отправляется на сервер. Session_Start вызывается, и новый сеанс создается с использованием того же идентификатора сеанса (кстати: мне нужно, чтобы это был тот же идентификатор сеанса, поскольку он используется для хранения данных в базе данных).
Результат:
Каждый раз, когда я нажимаю F5 в ранее завершенном сеансе, вызывается метод Session_Start, выполняется запрос, и немедленно вызывается метод Session_End.
Когда я открываю другой браузер, метод Session_Start вызывается только один раз. Затем через 5 минут Session_End каждый F5 вызывает выполнение последовательности Session_Start / request / Session_End.
Соответствующий раздел web.config:
<system.web>
<compilation debug="true" />
<sessionState timeout="2" regenerateExpiredSessionId="false" />
</system.web>