Я использую кэш вывода для веб-сайта с системой входа в систему. У меня есть глобальные страницы, которые могут быть доступны каждому пользователю. Эти страницы кэшируются и также используют главную страницу.
<%@ 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;
}
У меня есть панель на главной странице, которая видна для аутентифицированных пользователей. Когда пользователь входит в систему и просматривает общедоступную страницу. Другой гостевой пользователь также видит панель аутентифицированного пользователя на странице А. Если гость впервые просматривает страницу А, то аутентифицированный пользователь не видит панель на странице А.
Какая часть моего кода неверна? Я впервые использую 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;
}