Я реализую настраиваемую систему заявок, используя метод Application_PostAuthenticateRequest
в моем global.asax
файл (ASP. NET MVC). Мне интересно, каковы накладные расходы для такого рода вещей - поскольку он десериализует некоторую информацию по каждому запросу. Он генерирует cookie размером около 1,8 КБ, что составляет тонну, но является ли это лучшей альтернативой, чем частые обращения к базе данных?
Казалось разумнее реализовать собственный FormsAuthenticationTicket
, чем непрерывное обращение к базе данных и обратно на основе User.Identity.Name
. Но меня беспокоит то, что эта постоянная десериализация очень тормозит. Но выглядит это примерно так ...
protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
string encTicket = authCookie.Value;
if (!String.IsNullOrEmpty(encTicket))
{
// decrypt the ticket if possible.
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(encTicket);
var userData = Deserializer.Deserialize(ticket);
UserPrincipal principal = new UserPrincipal(userData);
HttpContext.Current.User = principal;
}
}
}
Вот класс, сериализуемый как UserData
в FormsAuthenticationTicket
.
[Serializable]
public class MembershipData
{
public string Email
{
get;
set;
}
public int Id
{
get;
set;
}
public string[] Roles
{
get;
set;
}
public int[] Ancillary
{
get;
set;
}
}