私はOutputCacheをユーザコントロールを持っている私のページで使っていますが、ユーザのログインに関連しているため、この特定のユーザコントロールをキャッシュしたくありません(ページにアクセスすると、別のユーザーと認証されたユーザー)。ASP.NETユーザーコントロールをキャッシュしないでください。
どうすればいいですか?
私はOutputCacheをユーザコントロールを持っている私のページで使っていますが、ユーザのログインに関連しているため、この特定のユーザコントロールをキャッシュしたくありません(ページにアクセスすると、別のユーザーと認証されたユーザー)。ASP.NETユーザーコントロールをキャッシュしないでください。
どうすればいいですか?
個人的に私がログインし、ユーザー別のキャッシュされたページビューをログアウト与える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コントロールは、コンテンツの大部分が がキャッシュされているページの 部分ページ のキャッシュを簡略化したソリューションを提供します。 出力キャッシュ全体のページを次に 置換コントロールを使用して、 を除外するページの一部を除外キャッシュ 。
私は代替コントロールを個人的に使用したことはありませんでしたが、先日それを調べていました。更新されたコンテンツを何らかの方法でキャッシュされたページ出力に注入できるように聞こえました。
ページをキャッシュすることはできますが、ユーザーコントロールをキャッシュすることはできますが、ユーザーコントロール以外のページはキャッシュできません。ユーザーコントロールを実行すると、ページ全体を実行する必要があります。ページの出力キャッシュを異なるユーザーを認識させる必要があります。
ユーザーIDがCookieに格納されている場合は、VaryByHeader="Cookie"
を使用してCookieの各セットをキャッシュできます。 VaryByCustom="SomeString"
を使用して、SomeString
のチェックを実装して、GetVaryByCustomString
メソッドのユーザーIDのチェックをGlobal.asax
に行うことができます。
あなたはキャッシュフィルタを作成できます。このフィルター内部http://weblogs.asp.net/rashid/archive/2008/03/28/asp-net-mvc-action-filter-caching-and-compression.aspx
チェックをユーザーがログインされているかどうか。