2012-04-03 1 views
1

Я получаю эту ошибку, и я знаю, что ее вызывает. Есть много причин, но в моем случае проблема заключается в том, что машинный ключ отличается от сервера к серверу (в веб-ферме), и поэтому, когда он перескакивает с машины на машину, он не может расшифровывать viewstate и/или cookie. С тех пор я исправил эту проблему, однако некоторые пользователи по-прежнему оставляют файлы cookie на своей машине, написанные со старым машинным ключом, и они получают эту ошибку. Мне нужен хороший способ справиться с этой ошибкой, вывести их из системы, а затем перенаправить обратно на страницу входа. Я попытался помещать обработчик исключений в global.asax в Application_error, но это не похоже на ошибку. Происходят другие ошибки, и я отфильтровал эту ошибку (посмотрев на исключение). У меня есть customErrors 'on' в web.config. Как мне это сделать?asp.net Не удалось проверить данные

ответ

1

Существует несколько способов решения этой проблемы. Лучшее общее решение установить ключи шифрования и дешифрования в явном виде в machine.config каждого сервера:

<machineKey validationKey="JFDSGOIEURTJKTREKOIRUWTKLRJTKUROIUFLKSIOSUGOIFDS..." decriptionKey="KAJDFOIAUOILKER534095U43098435H43OI5098479854" validation="SHA1" /> 

Другой вариант, чтобы отключить шифрование ViewState в целом, но вы потеряете некоторые преимущества в плане безопасности, делая это:

<pages viewStateEncryptionMode="Never" /> 

Наконец, вы можете отключить проверку:

<pages enableViewStateMac="false" ... /> 
+0

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