2010-11-15 8 views
7

Я использую выходной кеш для веб-сайта с системой входа. У меня есть глобальные страницы, к которым может обращаться каждый пользователь. Эти страницы кэшируются и также используют главную страницу.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.

Какая часть моего кода неверна? Я использую 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; 
} 
+0

ОК, я обнаружил, что не могу получить доступ к текущей переменной сеанса «Состояние сеанса недоступно в этом контексте». Попытка исправить это сейчас. –

ответ

0

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

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

+0

Я вижу, что переменная сеанса изменена, но проблема заключается в том, что GetVaryByCustomString не работает/работает правильно. Я думаю, –

+0

@hasanGursoy Да где-то есть проблема, но если вызывается функция, параметр сеанса не задан. – Aristos

+1

@hasanGursoy Проверьте это http://www.aspmessageboard.com/showthread.php?t=174916 – Aristos