Дилемма OutputCache с аутентификацией в ASP.NET MVC

Я пишу ASP Сайт .NET MVC, который включает в себя возможность для пользователей создавать учетные записи и входить в систему. Поскольку я также хочу агрессивно кэшировать сайт, у меня возникают некоторые проблемы, смешивая кеширование с аутентификацией.

На каждой странице, по адресу вверху, если пользователь вошел в систему, я выводю его имя пользователя, ссылку на его профиль и ссылку для выхода. Если они не вошли в систему, я выводю стандартную ссылку для входа. Кроме того, на самой странице часть контента не отображается неаутентифицированным пользователям, а другая информация зависит от того, какой пользователь вошел в систему.

Я впервые попытался решить эту проблему некоторое время назад, спросив команду Stack Overflow, как они решили эту проблему. Джефф ответил, что они вообще не кешируют неаутентифицированных пользователей. Итак, я написал атрибут, производный от OutputCacheAttribute, но отменяет кеширование, если пользователь вошел в систему .

В настоящее время я использую этот атрибут, но получаю неверные результаты ] в некоторых случаях. Например, пользователь может посетить какую-либо страницу, затем войти в систему, а затем снова посетить страницу, только чтобы увидеть ссылку для входа вверху, а не свое имя пользователя.

Вот некоторые решения, которые я рассматриваю:

  • Установка типа HttpCacheability или Cache-Control на частный , а не на общедоступный . Таким образом, ответ кэшируется только на стороне клиента. Это решит проблему? Если да, повлияет ли это на эффективность кеширования? Я заметил, что Stack Overflow, похоже, использует public , однако
  • Настройка параметра VaryByCustom для разного кеширования для каждого пользователя , например в этом руководстве . Поможет ли это при сохранении эффективности и действенности кеширования?

Заранее спасибо!

8
задан Maxim Zaslavsky 16 January 2011 в 21:24
поделиться