2013-07-23 4 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