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

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

<%@ 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;
}

person HasanG    schedule 15.11.2010    source источник
comment
ОК, я обнаружил, что не могу получить доступ к текущей переменной сеанса. Состояние сеанса недоступно в этом контексте. Попытка исправить это сейчас.   -  person HasanG    schedule 16.11.2010


Ответы (1)


Я думаю, что, вероятно, Session["UserID"] по какой-то причине всегда возвращает null/или несколько раз возвращает null, даже если пользователь аутентифицирован.

Дважды проверьте, что вы установили его, прежде чем эта функция запросит его.

person Aristos    schedule 16.11.2010
comment
Я вижу, что переменная сеанса изменена, но проблема в том, что GetVaryByCustomString не запускается/работает должным образом, я думаю - person HasanG; 16.11.2010
comment
@hasanGursoy Да, где-то есть проблема, но если функция вызывается, то параметр сеанса не установлен. - person Aristos; 16.11.2010
comment
Перепробовал все, но кажется, что Session недоступен, когда он запрашивается кэшированной страницей VaribyCustom, он работает только с пользовательскими элементами управления. - person HasanG; 16.11.2010
comment
@HasanGursoy Так что я прав насчет сессии!. Попробуйте просто получить файл cookie сеанса. Это то же самое, что и тот, который вы пытаетесь. - person Aristos; 16.11.2010
comment
Я не могу использовать файлы cookie для аутентификации пользователя. Поэтому я отключил кеширование на всех страницах. - person HasanG; 16.11.2010