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

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

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

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

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


person Eric Brown - Cal    schedule 05.05.2011    source источник
comment
Пожалуйста, опубликуйте свой код - ваш вопрос очень неясен.   -  person Oded    schedule 05.05.2011


Ответы (2)


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

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

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

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

person Adrian Clark    schedule 24.06.2011

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

вы должны проверить сеанс, например

If Session("username") = nothing then

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

End if
person Bhargav Mistri    schedule 05.05.2011
comment
В каком событии в Global.asax я должен проверить это? Я думал, что помню, как делал это раньше, но я терплю неудачу, находя правильное событие. - person Eric Brown - Cal; 05.05.2011
comment
Будет ли Sessio[bob] не всегда == null в начале сеанса, поэтому он всегда будет перенаправлять вас на страницу входа, даже в первый раз, когда я пытаюсь войти?? - person Eric Brown - Cal; 06.05.2011
comment
но вам не нужно писать это на странице входа в систему.. вы можете написать этот код на другой странице, например.. главная страница в событии загрузки - person Bhargav Mistri; 07.05.2011