OuputCache, есть ли способ отличить вошедших в систему и анонимных пользователей
У меня есть сайт MVC .net, и я пытаюсь использовать OutputCache для повышения производительности.
/// <summary>
/// Broker View Page
/// </summary>
/// <returns></returns>
[Route("{lang}/brokers/details/{id}/{code}", Order = 1)]
[Route("brokers/details/{id}/{code}", Order = 2)]
[OutputCache(Duration = (60 * 60), VaryByParam = "none")]
public ActionResult View(int? id, string code)
{
Это обеспечивает огромный выигрыш в производительности при втором и последующих посещениях сайта, но я только что обнаружил один огромный недочёт!
Если клиент посещает страницу анонимно, затем входит в систему и возвращается на страницу, он все равно получает доступ к просмотру без аутентификации (аутентифицированные клиенты должны видеть то же содержимое, но другой заголовок)
Можно ли использовать OutputCache, чтобы сохранить прирост производительности, но достаточно ли он умен, чтобы знать о различиях между аутентифицированным и не прошедшим аутентификацию?
1 ответ
Вы можете использовать "VaryByCustom"
В контроллере
[OutputCache(Duration = 1000, VaryByCustom = "user")]
public ActionResult Index()
{
return View();
}
В Global.ascx.cs:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "user")
{
if (context.Request.IsAuthenticated)
{
return context.User.Identity.Name;
}
}
return "anonymous"
}
Каждый пользователь получает свою уникальную версию в кешированной версии, и для "анонимных" пользователей также создается кешированная версия.