Вопрос по asp.net, membership – ASP.Net Store Данные пользователя в Auth Cookie

26

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

EditОй! Понял, я не объяснил себя хорошо. Я не пытаюсь повторно аутентифицировать пользователя на основе его файла cookie. Пользовательalready аутентифицированный системой членства ASP.Net - эта часть в порядке. Моя проблема заключается в том, что, если я хочу показать, например, псевдоним пользователя, мне нужно запустить другой запрос SQL, а затем сохранить его в сеансе. Я подумал, что было бы целесообразно сохранить эту информацию в файле cookie авторизации (опять же, уже созданном ASP.Net) в разделе UserData, который, кажется, был создан для этой цели.

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

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

Ваш Ответ

6   ответов
2

вы могли бы просто создать еще один файл cookie ... Я лично не стал бы связываться с этим файлом cookie.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Donnie Thomas
Error: User Rate Limit Exceeded Donnie Thomas
Error: User Rate Limit Exceeded
10

http://www.asp.net/learn/security/tutorial-03-vb.aspx (Шаг 4: Шаг 4: Хранение дополнительных данных пользователя в билете)

3

ie, что мешает кому-либо изменить свои куки-файлы на чей-либо идентификатор пользователя и логин?

Вам нужно настроить систему авторизации билетов. По сути, это значение cookie, которое проверяется, когда сеанс не существует. Если значение присутствует, вы запускаете его для таблицы заявок, которая должна содержать их идентификатор пользователя. Если вы найдете билет, дайте им сеансand a new ticket.

Error: User Rate Limit Exceeded Donnie Thomas
0

т больший файл cookie, который отправляется клиентом при каждом запросе.

Лучший способ избежать лишних попаданий в базу данных, о которых вы беспокоитесь, - это кэшировать эти данные в памяти после входа пользователя в систему.

ASP.NET имеет кеш на запрос HttpContext.Current.Items и кэш домена приложения HttpContext.Current.Cache, я думаю, что вы ищете HttpContext.Current.Cache в этом случае.

В качестве альтернативы, если вам необходимо кэширование на разных веб-серверах (веб-серверах с балансировкой нагрузки), вы можете просмотреть сторонние хранилища значений ключей, такие как memcached, redis, speed, ncache и т. Д.

Error: User Rate Limit Exceeded
3

почему бы вам не подключиться к ней с помощьюпользовательский профиль провайдера.

Если вы хотите еще один пример того, как реализовать что-то вроде этого, вы можете взглянуть наПоставщик профиля таблицы SQL

36

http://www.danharman.net/2011/07/07/storing-custom-data-in-forms-authentication-tickets/

Это поддерживает шифрование и аутентификацию и использует json для сериализации класса в поле UserData.

Edit:

Блог больше не существует, архив можно найтив веб-архиве здесь.

Summary from blog:

Получить существующий файл cookie и авторизационный билет

HttpResponse response = HttpContext.Current.Response;
bool rememberMe = true;
var cookie = FormsAuthentication.GetAuthCookie(name, rememberMe);
var ticket = FormsAuthentication.Decrypt(cookie.Value);

Определите ваши пользовательские данные (убедитесь, что они сериализуются в json)

var userData = new YourUserClass(...);

Создайте новый билет авторизации с вашими данными и существующими настройками билета аутентификации

var newTicket = new FormsAuthenticationTicket(ticket.Version, 
    ticket.Name, 
    ticket.IssueDate, 
    ticket.Expiration, 
    ticket.IsPersistent, 
    userData.ToJson(), //This is where you'd set your user data
    ticket.CookiePath);
var encTicket = FormsAuthentication.Encrypt(newTicket);

Установите свой заказной билет в cookie и добавьте в ответ

cookie.Value = encTicket;
response.Cookies.Add(cookie);
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы