2013-07-23 8 views
11

В настоящее время я работаю над проектом ASP.NET MVC и натолкнулся на ошибку, которая показалась странной.ASP.NET MVC AntiForgeryToken и кэширование

В шаблонах шаблонов ASP.NET MVC всегда появляется AntiForgeryToken (что заставляет меня думать, что это лучшая практика). Однако AntiForgeryTokens, похоже, не работают с кешированием.

Например, когда я открываю сайт с формой, включающей AntiForgeryToken, и я дублирую окно браузера, оба окна имеют тот же самый AntiForgeryToken, который приводит к исключению при отправке формы. Эта проблема не существует, когда кеширование отключено (через ActionFilter NoCache, см. Disable browser cache for entire ASP.NET website).

Итак, я думаю, мой вопрос: это должно быть так? Есть ли другой способ помимо отключения кэша для решения проблемы?

Особенно тот факт, что шаблоны ASP.NET MVC по умолчанию содержат AntiForgeryTokens, но не отключают кеш (и поэтому открыты для ошибки, описанной выше) заставляет меня задуматься.

Заранее благодарен!

+0

Можете ли вы выслать свой код и точную ошибку? 'Html.AntiforgeryToken()' каждый раз генерирует новый токен, поэтому в двух окнах браузера вы должны иметь разные значения. – andreister

+1

Не, если браузер не запрашивает сервер для второго окна браузера, а использует его кеш. – chrischu

ответ

7

Это ожидаемое поведение. Кэширование прекрасно кэширует ответ, в том числе значение AntiForgeryToken. Отключить кеширование в формах и, в частности, на страницах, которые используют AntiForgeryToken. Если вы думаете об этом дальше, если вы находитесь в приложении для ввода данных, вы хотите кэшировать свои формы ввода данных? Возможно нет. Однако вы хотите кэшировать тяжелые отчеты - даже если это просто микро-кэширование - второй или второй.

+1

Что значит «Отключить кеширование по формам»? –

+0

Каждый раз, когда вы принимаете ввод пользователя. В принципе, каждый раз, когда вы используете тег '

' или тег ''. – robrich

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