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