Вопрос жизненного цикла сессии

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

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

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

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

2 ответа

Решение

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

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

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

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

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

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

If Session("username") = nothing then

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

End if
Другие вопросы по тегам