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