none
Имя текущего пользователя RRS feed

  • Вопрос

  • Здравствуйте. Сделал небольшую аутентификацию через форму

    FormsAuthentication.SetAuthCookie(username, false);

    И теперь чтобы получить имя пользователя лезу в "HttpContext.Current.User.Identity.Name"

    Подскажите правильно ли это? Если нет то как по другому? Могу ли я записать в Cookie экземпляр объекта User, а то каждый раз обращаюсь поиску по имени в БД?

    29 августа 2013 г. 18:20

Ответы

  • По моему тут пошла некоторая путаница. Дело в том, что метод FormsAuthentication.SetAuthCookie() устанавливает куку и идентификатор (естественно зашифрованный) на основе имени пользователя. Это делает система автоматически. А вот хранить целый объект в куки используя стандартные средства просто так не получится. Его надо предварительно сериализовать, потом зашифровать и записать в куки, а потом обратный процесс. В целом это не правильно. Получение данных пользователя методом который описан вами правильно, одно обращение за раз к базе это нормально. Если не хотите кажды раз обращаться к БД, можете хранить объет User с его данными в Session.

    Сделаем содержимое сообщества лучше, вместе!

    • Предложено в качестве ответа YatajgaEditor 2 сентября 2013 г. 5:45
    • Помечено в качестве ответа YatajgaEditor 7 сентября 2013 г. 7:28
    30 августа 2013 г. 14:42
    Модератор

Все ответы

  • Что такое файлы cookie? Файлы cookie – это файлы, которые создаются посещаемыми вами веб-сайтами для хранения пользовательской информации, например, настроек веб-сайта или данных о профиле. Существует два типа файлов cookie: Основные файлы cookie сохраняются непосредственно сайтом, URL которого указан в адресной строке. Сторонние файлы cookie устанавливаются сайтами, содержание которых, например объявления или изображения, встроено в просматриваемую страницу.

    Судя по данной статье, записать сам экземпляр не сможете, но можно записать данные для создания экземпляра на ходу

    29 августа 2013 г. 18:37
  • Безопасность страдает. Имя пользователя, которое хранится в браузере можно заменить.

    30 августа 2013 г. 5:00
  • Безопасность страдает. Имя пользователя, которое хранится в браузере можно заменить.

    Правильно подмечено. "Подскажите правильно ли это?" - это правильно, нет ничего плохого в этом.

    Сделаем содержимое сообщества лучше, вместе!

    30 августа 2013 г. 5:25
    Модератор
  • Безопасность страдает. Имя пользователя, которое хранится в браузере можно заменить.

    Но вроди б FormsAuthentication.SetAuthCookie(username,false) хеширует данные.

    • Изменено Rokstedi 30 августа 2013 г. 9:20 ошибки
    30 августа 2013 г. 9:20
  • По моему тут пошла некоторая путаница. Дело в том, что метод FormsAuthentication.SetAuthCookie() устанавливает куку и идентификатор (естественно зашифрованный) на основе имени пользователя. Это делает система автоматически. А вот хранить целый объект в куки используя стандартные средства просто так не получится. Его надо предварительно сериализовать, потом зашифровать и записать в куки, а потом обратный процесс. В целом это не правильно. Получение данных пользователя методом который описан вами правильно, одно обращение за раз к базе это нормально. Если не хотите кажды раз обращаться к БД, можете хранить объет User с его данными в Session.

    Сделаем содержимое сообщества лучше, вместе!

    • Предложено в качестве ответа YatajgaEditor 2 сентября 2013 г. 5:45
    • Помечено в качестве ответа YatajgaEditor 7 сентября 2013 г. 7:28
    30 августа 2013 г. 14:42
    Модератор
  • да че-то запутались) Просто, я понял, что хотели хранить данные пользователя в открытом виде. Но если вы думаете, что при каждом обращении к HttpContext.Current.User.Identity.Name asp.net лезет в БД, то как сказал Yatajga  обращение к БД производится один раз, при обращении к странице модуль FormsAuthentificationModule аутентифицирует пользователя, обращаясь к бд и заполняет HttpContext.Current.User.Identity.Name. Так что, обращение к БД происходит один раз
    30 августа 2013 г. 15:03