2010-05-03 1 views
5

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

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

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

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

Неудовлетворительные данные состояния сеанса?

AFAIK его набор для inproc, cookieless, тайм-аут 30 минут, установка ванили IIS.

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

NB: время между записью и читать о 70ms .. достаточно времени для данных, которые будут записаны в RAM .....

ответ

1

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

ASP.NET Profiles - предпочтительный способ сохранить эту информацию. Возможно, вы захотите прочитать ASP.NET State Management Recommendations.

+0

Фактически, OP указывает, что это проблема безопасности, поэтому, вероятно, связана с аутентификацией. В этом случае профили не имеют авторитарного использования без билета форм. –

2

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

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

2

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

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

+0

Я согласен, причина, по которой она работает с перерывами, заключается в том, что иногда вы получаете тот же рабочий процесс, а другие вы этого не делаете. Попробуйте использовать режим sessionstate, отличный от InProc. –

2

У меня нет ответа на вашу конкретную проблему, но Клаудио я должен что-то сказать.

Что я должен сказать, так это то, что использование сеанса для обеспечения безопасности - это 90-е. Буквально.

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

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

Безопасность не является одним из таких.

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

  • Нет связанных вопросов^_^