2012-01-19 3 views
1

Я пытаюсь создать приложение ASP.NET MVC 3, в котором у меня есть моя собственная система аутентификации. Я последовал за некоторыми битами, написанными на this site, которые я нашел в другом сообщении SO.Где хранить информацию для входа пользователя?

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

Это все хорошо и хорошо, но каковы эти лучшие способы поиска информации о сохраняющейся регистрации?

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

+0

Спасибо за все ответы. Хотел бы я отметить более 1 как ответ. –

ответ

3

Это зависит о ваших потребностях.

Сессия:

  • сохраняется на сервере, потребляют ресурсы сервера
  • наиболее безопасный (никто не может изменить данные сессии)
  • потерял, когда пользователь близко браузер

Cookie:

  • сохранен в браузере клиента (do esn't потребляет ресурсы сервера)
  • менее безопасно, поскольку он доступен на клиентском компьютере и в сети (так это хорошая идея для шифрования печенья, специально Войти печенье) информации Торгового
  • вы можете сохраняться через другой сеанс

Вообще говоря, когда у вас есть проблемы, как «вместо того, чтобы повторный запрос в базу данных на каждой странице» спросить себя, если вы можете использовать ASP.Net Caching

1

Я использую сессии, а также для моих приложений и работает почти нормально во всех сценариях, так плохо предпочитают сеанс через куки или кэш

2

я использую FormsAuthentication и создать билет с пользователем сериализованные данные, прикрепленные к нему , Это в значительной степени cookie, но хорошо поддерживается в среде .NET.

Поскольку вы упомянули решение «roll-your-own», это то, что я использую в этих ситуациях.

Это создает билет FormsAuthentication:

var authTicket = new System.Web.Security.FormsAuthenticationTicket(1, System.Web.Security.FormsAuthentication.FormsCookieName, DateTime.Now, DateTime.Now + System.Web.Security.FormsAuthentication.Timeout, false, this.Serialize(someObject)); 

var encrypt = System.Web.Security.FormsAuthentication.Encrypt(authTicket); 

var authCookie = new HttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName, encrypt) { HttpOnly = true }; 
HttpContext.Current.Response.Cookies.Add(authCookie); 

Это захватывает информацию о билетах:

var result = new FormsAuthenticationTicketData((HttpContext.Current.User.Identity as System.Web.Security.FormsIdentity).Ticket.UserData); 

Есть несколько способов сериализовать данные в куки, но я сериализовать его в формат JSON, прежде чем положить (в объекте должна быть возможность сериализации):

public string Serialize(object someObject) 
{ 
    var serializer = new JavaScriptSerializer(); 
    var output = serializer.Serialize(someObject); 

    return output; 
} 

Чтобы использовать данные, все, что вам нужно сделать, это десериализировать его.Помните, что все, что вы действительно хотите пройти с этим билетом, - это некоторые идентифицирующие данные, которые можно использовать для вытаскивания «частной» информации с ваших контроллеров или переопределения AuthorizeAttribute.

Надеюсь, что это поможет!

Смежные вопросы