Я знаю, что этот вопрос уже устарел и уже имеет принятый ответ, но я хотел бы поделиться своими мыслями и тем, как мы в настоящее время делаем вещи с подобной настройкой.
Первоначально мы проходили тот же процесс, что и вы, и включили в файл cookie довольно много пользовательских данных. Этот процесс сократил количество посещений нашей базы данных, но в итоге мы столкнулись с ошибкой, когда некоторые пользователи вообще не могли войти, а другие могли. Оказывается, из-за наших сериализованных данных файл cookie молча отбрасывался, когда его размер превышал определенный размер.
Наш текущий процесс представляет собой двухуровневую систему кэширования. Мы сохраняем идентификатор базы данных пользователя в файле cookie как User.Identity.Name
, а затем в PostAuthenticateRequest пытаемся получить информацию о пользователе из локального кэша ASP.net, возвращаясь к распределенному кэшу Redis. Локальный кэш находится в работе и хранится в течение 15 секунд (поэтому повторяющиеся запросы не требуют передачи данных по Redis). Кэш Redis хранится в течение дня и становится недействительным при обновлении. Если оба из них пропущены, мы загружаем информацию из SQL Server.
Затем мы переносим эту пользовательскую информацию в пользовательский IPrincipal, и все работает как чудо. Похоже, что это работает очень хорошо для нас на веб-сайте с довольно высокой загрузкой.