2013-07-23 42 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()'は毎回新しいトークンを生成するので、2つのブラウザウィンドウで異なる値を設定する必要があります。 – andreister

+1

ブラウザが2番目のブラウザウィンドウに対してサーバにクエリを実行せず、 – chrischu

答えて

7

これは予期された動作です。キャッシュは、AntiForgeryTokenの値を含め、答えをうまくキャッシュします。フォーム、特にAntiForgeryTokenを使用するページのキャッシングを無効にします。さらにこれについて考えると、データ入力アプリケーションを使用している場合は、データ入力フォームをキャッシュしますか?おそらくそうではありません。しかし、重いレポートは、たとえそれがちょうどマイクロキャッシングであっても、2〜2回キャッシュする必要があります。

+1

「フォームでキャッシングを無効にする」とはどういう意味ですか? –

+0

ユーザーの入力を受け入れるたびに。基本的に '

'タグまたは ''タグがあるときはいつでも。 – robrich