Я использую asp.net MVC, поэтому я сделал это в моем контроллере
if (User.Identity.IsAuthenticated) {
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));
Response.Cache.SetNoStore();
Response.Cache.SetNoServerCaching();
}
else {
Response.Cache.VaryByParams["id"] = true; // this is a details page
Response.Cache.SetVaryByCustom("username"); // see global.asax.cs GetVaryByCustomString()
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetValidUntilExpires(true);
}
Причина, по которой я сделал это таким образом (а не декларативно), была в том, что мне также требовалась возможность включать и выключать его с помощью конфигурации (здесь не показано, но есть дополнительная проверка в if для моей переменной config).
Вам все еще нужно изменить имя пользователя, иначе вы не будете выполнять этот код, когда появится зарегистрированный пользователь. Моя функция GetVaryByCustomString возвращает «анонимный», если он не прошел проверку подлинности, или имя пользователя, когда оно доступно.