Думаю, я обнаружил проблему с ASP.NET MVC и его конвейером событий. В частности, я обнаружил, что Session_Start вызывается несколько раз, каждый из которых содержит новый SessionID.
Вот пошаговый процесс:
Добавьте следующий метод (да, он пуст):
protected void Session_Start () { }
Установите точку останова в методе
Я пробовал то же самое в стандартном веб-приложении ASP.NET (не MVC), а Session_Start запускается только один раз.
Я почти уверен, что не делаю здесь что-то не так, поскольку я использую шаблоны проектов по умолчанию, и единственный код, который изменяется, - это Global.asax.cs файл, чтобы добавить метод Session_Start.
Я использую IIS Express, но я повторил вышеупомянутые шаги, используя веб-сервер "Cassini" (Visual Studio Development Server), с тем же результатом.
Любой совет?
Я решил использовать Fiddler для проверки HTTP-трафика во время сеанса отладки. Кажется, что:
Я записал каждый из трех сгенерированных SessionID, и похоже, что браузер придерживается первого. Итак, когда мы подошли к шагу 6 выше, и все вроде бы работает, на самом деле он использует самый первый сгенерированный SessionID.
Итак ... Я решил разместить файл "favicon.ico". Я поместил файл ico в корень проекта и снова начал сеанс отладки. На этот раз Session_Start срабатывает только один раз. "/favicon.ico" был успешно обработан (200).
Итак ... Я думаю, в определенном смысле он работает так, как должен ... Но почему вызовы "/favicon.ico" запускают Session_Start мероприятие???? Разве у меня не должно быть выбора НЕ размещать значок?
В стороне: Я пробовал все вышеперечисленное в проекте ASP.NET (не mvc), и у него не было такой же проблемы, хотя и не было значка. ico, размещенный в проекте «Веб-приложение ASP.NET» по умолчанию.