Состояние сеанса не сохраняется между страницами - PullRequest
5 голосов
/ 03 мая 2010

У меня проблемы с сайтом asp.net c #, из-за которого я устанавливаю для объекта состояния сеанса значение true, а затем перенаправляю на другую страницу, которая должна проверить значение объекта состояния сеанса, и он имеет значение null.

Иногда он установлен правильно, а иногда просто равен нулю.

Когда я отлаживаю на своей локальной машине, она работает каждый раз идеально. Такое темпераментное поведение происходит только при загрузке на веб-сервер.

Поскольку он основан на безопасности сайта, очевидно, важно, чтобы данные сеанса были правильными и точными каждый раз.

Являются ли данные состояния сеанса ненадежными?

AFAIK установлен в inproc, без файлов cookie, тайм-аут 30 минут, установка IIS ванильным способом.

У кого-нибудь есть предложения? Возможно, мне нужно выполнить thread.sleep между хранением данных сеанса и чтением?

Примечание: время между записью и чтением составляет около 70 мс .. достаточно времени для записи данных в ОЗУ .....

Ответы [ 4 ]

2 голосов
/ 03 мая 2010

У меня нет ответа на вашу конкретную проблему, но Клаудио, я могу кое о чем.

Что я должен сказать, так это то, что использование сессии для безопасности - это 90-е годы. В прямом смысле.

FormsAuthentication была разработана, чтобы заменить эту технику и делает довольно хорошую работу.

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

Безопасность не относится к числу таких.

2 голосов
/ 03 мая 2010

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

Таким образом, вы должны предусмотреть все эти сценарии с состоянием сеанса. Старайтесь избегать использования состояния сеанса для таких вещей. Если вы настраиваете доступ в своем состоянии сеанса и не знаете точно, как он работает, возможно, вы открываете свой сайт для многих угроз безопасности.

2 голосов
/ 03 мая 2010

Все указывает на веб-ферму. Если у вас есть разные веб-серверы в производственной среде, обслуживающие ваше приложение, вы можете поэкспериментировать с таким поведением.

Я не могу найти другого объяснения этому "РАБОТАЕТ НА МОЕЙ МАШИНЕ!"

1 голос
/ 03 мая 2010

Если состояние сеанса потеряно, обычно это происходит потому, что ваш процесс либо перезагружается, либо завершается сбоем. Я бы никогда не "положился" на состояние сеанса между страницами. Вместо этого вы можете попытаться сохранить данные между страницами другим способом. Возможно передача информации через переменные формы или сохранение данных в базе данных.

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

...