Я пишу ASP.NET MVC-сайт, который включает в себя возможность для пользователей создавать учетные записи и входить в систему. Так же, как я также хочу, чтобы кешировать сайт агрессивно, Я бегу в некоторые проблемы, связанные с кэшированием с аутентификацией.Дилемма OutputCache с аутентификацией в ASP.NET MVC
На каждой странице вверху, если пользователь вошел в систему, я выводил их имя пользователя, ссылку на их профиль и ссылку для выхода из системы. Если они не вошли в систему, я вывожу стандартную ссылку для входа. Кроме того, на самой странице некоторый контент не отображается для пользователей, не прошедших проверку подлинности, в то время как другой контент зависит от того, какой пользователь вошел в систему.
Я впервые попытался решить эту проблему некоторое время назад, попросив команду Stack Overflow, как они решили проблема. Джефф ответил, что они вообще не делают кэширования для не прошедших проверку пользователей. Итак, я написал атрибут, полученный из OutputCacheAttribute, но отменяет кеширование, если пользователь зарегистрирован в.
В настоящее время я использую этот атрибут, но в некоторых случаях я получаю неправильных результатов. Например, пользователь может посетить некоторую страницу, затем войти в систему, а затем снова посетить страницу, только чтобы увидеть ссылку для входа вверху, а не их имя пользователя.
Вот некоторые решения, которые я рассматриваю:
- Установка
HttpCacheability
илиCache-Control
типа вprivate
, а неpublic
. Таким образом, ответ только кэшируется на стороне клиента. Это устранит проблему? Если это произойдет, это повлияет на эффективность кеширования? Однако я заметил, что Stack Overflow используетpublic
. - Настройка параметра VaryByCustom для кэширования по-разному для каждого пользователя, например in this tutorial. Будет ли это помогать, сохраняя при этом эффективность и эффективность кеширования?
Заранее благодарен!