Например, если пользователь зарегистрирован, что было бы лучшим подходом для хранения идентификатора пользователя и/или его/ее ролей/групп? Очевидными подходами являются файлы cookie и сеанс? Какие еще варианты?Как сохранить значение во всем приложении asp.net mvc (бритва 3)?
ответ
По крайней мере, используя аутентификацию с помощью форм, вы можете поместить идентификатор пользователя и роли в билете Formst Auth.
Here'a пример того, как я сделал это:
public static HttpCookie CreateCookie(IUserIdValue userId, string name, IEnumerable<int> group, bool isPersistent = false)
{
var user = new AuthenticationTicketData() { Groups = @group, UserId = userId };
var ft = new FormsAuthenticationTicket(2, name, DateTime.Now, DateTime.Now.Add(FormsAuthentication.Timeout),
isPersistent, user.Pack());
var ck = new HttpCookie(FormsAuthentication.FormsCookieName)
{
Value = FormsAuthentication.Encrypt(ft),
Path = FormsAuthentication.FormsCookiePath,
Domain = FormsAuthentication.CookieDomain
};
if (isPersistent)
{
ck.Expires = DateTime.Now.Add(FormsAuthentication.Timeout);
}
return ck;
}
public static string Pack(this AuthenticationTicketData data)
{
if (data == null) throw new ArgumentNullException("data");
return String.Format("{0};{1}",PackUserId(data.UserId),string.Join(",",data.Groups));
}
static string PackUserId(IUserIdValue uid)
{
if (uid == null) throw new ArgumentNullException("uid");
var tpn = uid.GetType().GetFullTypeName();
return String.Format("{0}|{1}",tpn,uid.ToString());
}
public static HttpCookie SetAuthCookie(this HttpResponse response,IUserIdValue userId, string name, IEnumerable<int> group, bool isPersistent = false)
{
var ck = CreateCookie(userId, name, group, isPersistent);
response.AppendCookie(ck);
return ck;
}
Другой альтернативой является сохранение сеанса пользователя (никакого отношения к сессии) в базе данных, что-то вроде таблицы (справ, имя пользователя, идентификатор пользователя , роли, ExpireAt). Но этот подход более подходит, если вы хотите отслеживать, когда пользователь входит в систему/выходит из системы, или если вы используете собственную аутентификацию (а не Forms auth).
Спасибо за пример и объяснение! – Chaka
Если вы хотите сохранить значения для каждого пользователя, I сеанс - лучший вариант. Сессия создается для каждого пользователя/браузера. Каждый пользователь имеет свой собственный объект сеанса, поэтому таким образом вы можете сохранить информацию о ролях пользователей в приложении до окончания сеанса.
Я определенно не рекомендую хранить информацию о безопасности пользователя в файле cookie, потому что это вызовет серьезное нарушение безопасности в вашем приложении.
- 1. asp.net формат mvc DateTime во всем приложении
- 2. asp.net mvc 3 бритва изменить значение модели в поле зрения
- 3. просмотра отчетов в ASP.NET MVC 3 Бритва
- 4. Как сохранить обновленную модель во всем приложении
- 5. развертывание ASP.NET MVC (бритва)
- 6. Состояние поддержки MVC 4 во всем приложении
- 7. asp.net mvc бритва дополнительное пространство
- 8. Asp.net MVC 3 RC - Бритва ValidationMessageFor CustomMessage и ClientSideValidation Проблема
- 9. ASP.NET MVC переменная рядный Бритва
- 10. Как сохранить значение в ASP.Net MVC 3 без сообщения?
- 11. автозаполнение в asp.net mvc (бритва)
- 12. MVC 3 бритва пользовательский webhelper как?
- 13. Переменная во всем приложении
- 14. ASP.NET MVC 3 и HttpContext.Current.User.Identity.Name
- 15. CustomViewController во всем приложении
- 16. ASP.NET MVC - лучший способ сохранить критерии поиска по всем страницам
- 17. ASP.NET Core. Каков наилучший способ сохранения модели во всем приложении?
- 18. Как сохранить тот же фон во всем приложении?
- 19. Бритва MVC 3 Ajax возвращает 404
- 20. Измените FocusVisualStyle во всем приложении
- 21. Бритва Mvc 3 + Jquery автозаполнения вопрос
- 22. Размер шрифта во всем приложении
- 23. Как применять стили во всем приложении Silverlight?
- 24. ASP.NET MVC Model, как сохранить значение lable
- 25. Mvc 3 texbox в webgrid (бритва)
- 26. Сохранение объекта живым во всем приложении-Как?
- 27. значение «User.Identity.Name» на asp.net mvc 3
- 28. asp.net MVC бритва заполнить @ Html.DropDownList от twotables
- 29. MVC бритва @
- 30. Кэш Bitmap во всем приложении
Если вы хотите сохранить значения для пользователя, я думаю, что это лучшие варианты – pollirrata
Я не полностью понимаю, вы можете привести мне пример? – Chaka
Я добавил более подробную информацию в ответ ... – pollirrata