2014-02-05 4 views
1

Я хочу использовать переменную сеанса для хранения некоторых данных в моем приложении mvc 4, но я немного не уверен в жизненном цикле сеансов. У меня установлен тайм-аут и, очевидно, он умирает, когда это закончится, но мне очень интересно, что произойдет (и как я могу контролировать то, что происходит), когда:При каких обстоятельствах переменная сеанса умирает?

  • Браузер закрывает
  • Страница обновляется
  • Пользователь выходит из (я предполагаю, что мне нужно, чтобы иметь дело с этим вручную)
+0

Сессия выдержит все из них, во втором случае тайм-аут снова начнется с 0. –

+0

Какой тип 'SessionStateProvider' вы используете? –

+0

@TimSchmelter Спасибо. Итак, установив его в новый экземпляр, когда мое приложение начнет перезапускать тайм-аут каждый раз? – aw04

ответ

3

Я думаю, что в стороне от всех комментариев (которые я думаю, что все ответы), то (другое) ключевой пункт, чтобы думать о том, что на стороне клиента (браузер), сеансы печенья. Поэтому, если, например, я установил, что мой браузер отбрасывает файлы cookie каждый раз, когда я его закрываю, это «сломает» сеансы.

Очевидно, что это не относится к сеансам cookieless (где «идентификатор» находится в URL-адресе).

Кроме того, обратите внимание на this post на персистирующей и непостоянных печенья (где браузер близко, также известный как «браузер сессия», сбросят сеансы).

MSDN documentation:

ASP.NET должен отслеживать идентификатор сеанса для каждого пользователя, так что он может отображать пользователю состояния сеанса информации на сервере. По умолчанию ASP.NET использует непостоянный файл cookie для хранения состояния сеанса. Однако, если пользователь отключил куки в браузере, информация о состоянии сеанса не может быть сохранена в файле cookie.

ASP.NET предлагает альтернативу в виде сессий без cooki. Вы можете настроить приложение для хранения идентификаторов сеансов не в файле cookie, а в URL-адресах страниц вашего сайта. Если ваше приложение зависит от состояния сеанса, вы можете подумать о его настройке для использования сессий cookieless. Однако при некоторых ограниченных обстоятельствах , если пользователь разделяет URL-адрес с кем-то другим - возможно, чтобы отправить URL-адрес коллеге, пока сеанс пользователя по-прежнему активен, тогда оба пользователя могут в итоге разделить один и тот же сеанс с непредсказуемыми результатами.

Тем не менее, и в зависимости от типа данных, которые вы хотите сохраняется для й времени, вы можете также рассмотреть варианты хранения на стороне клиента (например, web/dom/local storage и т.д.) в дополнении к/совместно с ними или даже возможно, замена на сервер/хранилище на основе файлов cookie. Обратите внимание, что это не является «защищенным» от действий клиента/пользователя (пользователь может сбрасывать все эти данные, если/когда захочет), а также любые значения безопасности.

+0

Спасибо. Ссылка была особенно полезной. – aw04

Смежные вопросы