потеря состояния сеанса - PullRequest
1 голос
/ 04 февраля 2011

У меня есть приложение asp.net c #, которое использует состояние сеанса для хранения переменной, когда пользователь входит в систему. Это их имя для входа и оно широко используется в пользовательской области. Проблема в том, что сессия продолжает терять информацию на определенных компьютерах. Я действительно недостаточно знаю о состоянии сеанса, и я хотел знать, почему это происходит. Пример. Когда пользователь выполняет различные выборки в сетке, примерно через 2 минуты метка, которая показывает переменную состояния сеанса на экране, становится пустой, что создает проблемы для человека, когда он хочет добавить запись, поскольку база данных требует, чтобы его имя пользователя было выбито на запись.

Итак, в заключение. что может привести к тому, что переменная состояния сеанса потеряет свое значение через несколько минут и не на всех компьютерах. (У меня нет проблем на моем компьютере, только на клиентском компьютере - обычно это не так)

немного больше информации;

Я использую сеанс в коде на стороне сервера, т.е.

  session["username"] = username.Text;

, а также хостинг, который у меня есть, является средой общего хостинга, что означает, что я очень мало связан с настройками iis (боюсь, довольно дешевая работа). Попробую изменить веб-конфигурацию и доложить. Спасибо за все ответы.

Ответы [ 5 ]

4 голосов
/ 14 февраля 2011

если я понимаю вашу проблему, вы должны хранить данные сеанса вне процесса.Вы можете использовать «Режим сервера состояний» или «Режим сервера SQL», если у вас есть база данных SQLServer.

Здесь вы можете найти, как использовать http://msdn.microsoft.com/en-us/library/ms178586.aspx

В противном случае вы можете создать «пользовательскийпоставщик хранилища состояний сеанса ", но я думаю, что это немного сложнее.

4 голосов
/ 04 февраля 2011

Похоже (хотя я могу ошибаться), что у вас есть несколько серверов IIS, каждый из которых поддерживает состояние. Если вы распределяете нагрузку, нет гарантии, что вы дважды подключитесь к одному и тому же серверу. Таким образом, в то время как сервер A имеет информацию о состоянии, которую вы ищете, сервер B не будет.

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

2 голосов
/ 04 февраля 2011

Может быть, сессия заканчивается через 2 минуты?Значение должно быть в web.config в строке, подобной

<sessionState timeout="40"></sessionState>

. Или вы можете написать обработчик тайм-аута сеанса в global.asax и установить в нем точку останова, чтобы убедиться, что это причина.

0 голосов
/ 04 февраля 2011

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

И здесь, когда вы сталкиваетесь с частой проблемой, зарегистрируйтесь на IIS и увеличьте application pool для веб-сайта, так как ваш веб-сайт будет использовать больше памяти, чем пул приложений allowed, поэтому IIS recycles the session и session values are LOST.

0 голосов
/ 04 февраля 2011

Существует несколько способов сохранения состояния сеанса, два наиболее распространенных - это файлы cookie на стороне клиента и сеанс на стороне сервера. (мы могли бы попасть на серверы состояния сеанса и сеанс, сохраненный в базе данных, но я бы не хотел)

когда вы говорите, что другие пользователи имеют проблемы с использованием, но вы не заставляете меня думать, что их сеанс, вероятно, истекает. Трудно сказать, что пользователи делают все время, но хорошим тестом было бы войти в систему, подождать час или два, а затем вернуться к нему, чтобы проверить, сохраняется ли у вас состояние сеанса. Вы можете контролировать время ожидания сеанса в IIS, а также в web.config. даже если в большинстве сценариев «предполагается» переопределить настройки iis, в этих сценариях он работает не очень хорошо, и вам лучше обновлять истечение срока действия состояния сеанса IIS и веб-конфигурации.

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