У нас очень большое веб-приложение со многими страницами. Эти страницы требуют от нас знать роль пользователя, чтобы правильно отображать контент. Таким образом, в Application_AuthenticationRequest, у нас есть этот код:Как я могу сохранить определенное значение сеанса, требуемое в Application_AuthenticateRequest?
var id = new GenericIdentity(Request.Headers["ceid"]);
var rp = new MyRoleProvider();
var principal = new GenericPrincipal(id, rp.GetRolesForUser(id.Name));
Context.User = principal;
Проблема заключается в том, что мы должны использовать веб-службу, чтобы получить роль, и потому, что вызов делается каждый раз, когда каждый пользователь посещает страницу, веб служба попадает слишком много раз.
Идеальное решение было бы, если бы мы могли хранить роли в переменной сеанса, однако сеанс недоступен в Application_AuthenticateRequest. Мы рассмотрели возможность хранения словаря с записями для всех пользователей в переменной приложения, но я надеюсь, что мы сможем найти лучшее решение.
Есть ли способ сохранить роли текущего пользователя таким образом, чтобы они были доступны внутри Application_AuthenticationRequest? Мы очень осознаем безопасность; будет ли файл cookie действительным?
Знаете ли вы, что есть готовые функции для «кеширования» ролей пользователя в файле cookie ? https://msdn.microsoft.com/en-us/library/system.web.security.roles.cacherolesincookie%28v=vs.110%29.aspx –
Это работает, если вы хотите использовать Roles API; многие люди играют свою роль, поэтому хранение в файле cookie, который имеет HttpOnly (доступно только на сервере), установленном в true, является хорошим решением. –
Если вам не нравится использовать файл cookie, возможно, [MemoryCache] (https://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache%28v=vs.110%29.aspx) является возможным решением? –