8

ログインシステムを備えた 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;
}
4

1 に答える 1

0

ユーザーが認証されていても、おそらく Session["UserID"] は何らかの理由で常に null を返すか、場合によっては null を返すと思います。

この関数が要求する前に、設定したことを再確認してください。

于 2010-11-16T02:26:08.290 に答える