ログインシステムを備えた Web サイトに出力キャッシュを使用しています。すべてのユーザーがアクセスできるグローバル ページがあります。これらのページはキャッシュされ、マスター ページも使用します。
<%@ OutputCache Duration="3600" VaryByParam="none" VaryByCustom="userid" %>
ユーザーのログイン情報をセッションに保存しています。私のglobal.asaxファイルはここにあります:
public override string GetVaryByCustomString(HttpContext context, string arg)
{
string result = String.Empty;
if (arg == "userid")
{
object o = Session["UserID"];
if (o != null) { result = o.ToString(); }
}
else { result = base.GetVaryByCustomString(context, arg); }
return result;
}
認証されたユーザーに表示されるマスターページにパネルがあります。ユーザーがログインして公開ページ A を表示すると、別のゲスト ユーザーにもページ A の認証済みユーザー パネルが表示されます。ゲストが最初にページ A を表示した場合、認証済みユーザーはページ A のパネルを表示しません。
私のコードのどの部分が間違っていますか? 初めてVaryByCustomを使用しています。
編集
global.asax を次のように変更しましたが、テキスト ファイルには何も書き込まれません。
public override string GetVaryByCustomString(HttpContext context, string arg)
{
string result = String.Empty;
FileInfo t = new FileInfo(Server.MapPath("App_Data\\debug.txt"));
StreamWriter Tex = t.AppendText();
Tex.WriteLine("GetVaryByCustomString: " + arg);
if (arg == "userid")
{
object o = Session["UserID"];
if (o != null) { result = o.ToString(); }
Tex.WriteLine("Checked UserID: " + o + Tex.NewLine);
}
else { result = base.GetVaryByCustomString(context, arg); }
Tex.Close();
return result;
}