VaryByCustom не работает для переменной сеанса

Я использую кэш вывода для веб-сайта с системой входа в систему. У меня есть глобальные страницы, к которым может получить доступ любой пользователь. Эти страницы кэшируются и также используют главную страницу.

<%@ OutputCache Duration="3600" VaryByParam="none" VaryByCustom="userid" %>

I ' m сохранение данных для входа в систему в сеансе. Мой файл 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 .

EDIT

Я изменил свой 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;
}

7
задан HasanG 16 November 2010 в 09:46
поделиться