Вопрос жизненного цикла сессии - PullRequest
2 голосов
/ 05 мая 2011

Я немного озадачен жизненным циклом сеанса в ASP.NET, вот мой тестовый пример.

Пользователь входит в систему, я сохраняю некоторую информацию в переменной сеанса (например, * 1003).*) затем я делаю «сброс IIS».Пользователь все еще вошел в систему, но данные сеанса null (например, Session["bob"].ToString() выдает NullReferenceException.

Я ожидал, что данные сеанса все еще будут. Есть ли что-то, что я могу сделать, другоечем выйти из системы? Я ожидал, что данные сеанса будут присутствовать, пока пользователь все еще входит в систему.

Любые хорошие ссылки, так что я ухмыляюсь, что происходит, а также любая помощь в реальной проблемеЯ был очень признателен. Я пытался найти это в Google, но не смог сформулировать вопрос таким образом, чтобы получить то, что хотел.

Ответы [ 2 ]

7 голосов
/ 24 июня 2011

Поведение, которое вы наблюдаете - когда содержимое Session не выдерживает событие сброса IIS, - связано с тем, где хранятся значения сеанса.По умолчанию эти значения хранятся в памяти ASP.NET «Рабочий процесс», который является программой, которая запускает ваш веб-сайт ASP.NET.

Когда вы выполняете «сброс IIS», вы выключаетевесь сервер IIS, включая рабочий процесс ASP.NET.Это означает, что содержимое сеанса удаляется из памяти.Похоже, ваш пользователь все еще вошел в систему, потому что он контролируется куки-файлами, хранящимися в их браузере.Если файл cookie по-прежнему действителен, то логин будет

. Если вы хотите, чтобы ваше состояние сеанса выдерживало сброс IIS (или все, что вызывает перезапуск рабочего процесса ASP.NET), вам нужно сохранитьСессионные объекты в другом месте.Это полностью поддерживается ASP.NET с использованием различных «режимов» хранения сессий.Прочтите о них в статье MSDN " Режимы состояния сеанса ".

Общий обзор сеанса приведен в " Обзор состояния сеанса ASP.NET статья на MSDN.

0 голосов
/ 05 мая 2011

да, это правильно, но когда-нибудь это произойдет, тогда сеанс не удалится должным образом

вы должны проверить сессию как

If Session("username") = nothing then

Response.redirect("~/default.aspx")

End if
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...