VaryByCustom不适用于会话变量

时间:2010-11-15 21:56:35

标签: c# asp.net caching outputcache varybyparam

我正在使用输出缓存来登录带有登录系统的网站。我有全局页面,每个用户都可以访问。这些页面被缓存并使用母版页。

<%@ 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页上看不到面板。

我的代码中有哪些部分是错误的?我第一次使用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;
}

1 个答案:

答案 0 :(得分:0)

我认为由于某种原因,Session [“UserID”]可能总是返回null /或有时返回null,即使用户已通过身份验证。

在此功能要求之前仔细检查您是否设置了它。

相关问题