2009-08-10 14 views
5

私はOutputCacheをユーザコントロールを持っている私のページで使っていますが、ユーザのログインに関連しているため、この特定のユーザコントロールをキャッシュしたくありません(ページにアクセスすると、別のユーザーと認証されたユーザー)。ASP.NETユーザーコントロールをキャッシュしないでください。

どうすればいいですか?

答えて

10

個人的に私がログインし、ユーザー別のキャッシュされたページビューをログアウト与えるVaryByCustom属性を使用します。

<%@ OutputCache VaryByCustom="IsLoggedIn" Duration="30" VaryByParam="*" %> 

は、Global.asaxの中で、あなたは

public override string GetVaryByCustomString(HttpContext context, 
    string arg) 
{ 
    if (arg == "IsLoggedIn") 
    { 

     if (context.Request.IsAuthenticated) 
     { 
      return "Logged in: " + context.User.Identity.Name; 
     } 
     else 
     { 
      return "Not Logged In"; 
     } 

    } 
    else 
    { 
     return base.GetVaryByCustomString(context, arg); 
    } 

} 

を入れて、私はちょうど投げるつもりですこれはそこにある。代替制御はどうですか? MSDNのWebサイトによると

http://msdn.microsoft.com/en-us/library/ms228212.aspx

代替コントロールを使用すると、 動的に更新し、その後 キャッシュされたページに統合することができるページ上の領域を作成することができます 。 ... Substitutionコントロールは、コンテンツの大部分が がキャッシュされているページの 部分ページ のキャッシュを簡略化したソリューションを提供します。 出力キャッシュ全体のページを次に 置換コントロールを使用して、 を除外するページの一部を除外キャッシュ 。

私は代替コントロールを個人的に使用したことはありませんでしたが、先日それを調べていました。更新されたコンテンツを何らかの方法でキャッシュされたページ出力に注入できるように聞こえました。

1

ページをキャッシュすることはできますが、ユーザーコントロールをキャッシュすることはできますが、ユーザーコントロール以外のページはキャッシュできません。ユーザーコントロールを実行すると、ページ全体を実行する必要があります。ページの出力キャッシュを異なるユーザーを認識させる必要があります。

ユーザーIDがCookieに格納されている場合は、VaryByHeader="Cookie"を使用してCookieの各セットをキャッシュできます。 VaryByCustom="SomeString"を使用して、SomeStringのチェックを実装して、GetVaryByCustomStringメソッドのユーザーIDのチェックをGlobal.asaxに行うことができます。

関連する問題