Я использую веб-сайт 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_Start вызывается только один раз. Затем через 5 минут Session_End каждый F5 вызывает выполнение метода Session_Start.
Кто-нибудь может объяснить, почему это происходит?
Обновление:
После истечения времени ожидания сеанса все последующие запросы имеют начало и конец сеанса. Итак, в конце мой вопрос: почему сессии по этому последующему запросу закрываются немедленно?
2010-02-09 14:49:08,754 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1
2010-02-09 14:49:08,754 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET http://localhost:80/js/settings.js
2010-02-09 14:49:08,756 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq
2010-02-09 14:49:08,760 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1
2010-02-09 14:49:08,760 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /css/package.aspx?name=core
2010-02-09 14:49:08,761 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq
2010-02-09 14:49:08,762 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1
2010-02-09 14:49:08,762 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /js/package.aspx?name=all
2010-02-09 14:49:08,763 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq
2010-02-09 14:49:08,763 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1
2010-02-09 14:49:08,763 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /css/package.aspx?name=rest
2010-02-09 14:49:08,764 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq
2010-02-09 14:49:08,764 INFO Global.asax[7486] [(null)] - Session started. SID=nzponumvf1hbaniverffp4mq host=127.0.0.1
2010-02-09 14:49:08,765 INFO Global.asax[7486] [nzponumvf1hbaniverffp4mq] - Request start: GET /css/package.aspx?name=vacation
2010-02-09 14:49:08,765 INFO Global.asax[7486] [(null)] - Session ended. SID=nzponumvf1hbaniverffp4mq
Соответствующий раздел web.config:
<system.web>
<compilation debug="true" />
<sessionState timeout="2" regenerateExpiredSessionId="false" />
</system.web>