Вопрос жизненного цикла сессии
Я немного запутался в жизненном цикле сессии в 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