6

セッションの特定の値に基づいて MVC の出力キャッシュを変更することは可能ですか? 私は、varybycustom 機能を使用し、Global.asax で GetVaryByCustomString をオーバーライドすることについて多くのことを読みましたが、現時点ではセッションを利用できません。

public override string GetVaryByCustomString(HttpContext context, string custom)
{
     if (custom == "somekey") 
         //Want to check the session here (but it isn't available).

     return base.GetVaryByCustomString(context, custom);
}

これは、リクエスト パイプラインの後半までセッションが作成されないためだと理解しています。

私の懸念は、ユーザーのセッションに基づいてキャッシュを変更しないと、ページ (ユーザーがセッションで持っているものに基づいて変更され、そのユーザーに固有の追加の HTML があるなど) がキャッシュされ (URL が同じであるため)、ロードバランサー、プロキシサーバーなどによって提供され、ページ上の他の人のセッション情報を使用して他のリクエストに提供されます!

URL が同じである理由は、ユーザーが「ゲスト」としてアクセスし、何らかの情報を入力 (POST) し、これが検証されてセッションに保存され、同じページにリダイレクトされるためです (これは現在のはずです)。セッションデータに基づいてユーザーに固有であること)。

「ゲスト」が同じ URL にアクセスした場合、毎回同じ「標準」ページを提供する必要があるため、ページ自体は通常どおりにキャッシュする必要があります。

この方法でキャッシュを変更することは可能ですか?

4

3 に答える 3

3

ユーザーごとにキャッシュ出力をパーソナライズしたい場合は、次のように場所を設定することをお勧めOutputCacheLocation.Clientします。詳細はこちら

   [OutputCache(Duration=3600, VaryByParam="none", Location=OutputCacheLocation.Client, NoStore=true)]
   public string GetName()
   {
         return "Hi " + User.Identity.Name;
   }
于 2013-09-09T10:07:04.723 に答える
0

「ドーナツ キャッシュ」を調べる必要がありますが、これは ASP.NET MVC 3 ではサポートされていません。幸いなことに、 MvcDonutCachingを参照してください。

ASP.NET MVC 4 にはすぐに使用できる「ドーナツ ホール キャッシュ」が含まれていると読みましたが、現在の RC に含まれているかどうかはわかりません。

于 2012-07-25T09:12:48.063 に答える
0

Output Cache ActionFilterは役に立ちますか?

または、ビューをレイアウト ページにリファクタリングして、匿名セクションと認証済みセクションの部分ビューを追加し、部分キャッシュを利用することもできます。

于 2012-07-25T08:40:44.277 に答える