Сведения о вопросе

Fedya

08:28, 7th August, 2020

Теги

Хранение сведений о пользователе, вошедшем в систему

Просмотров: 440   Ответов: 8

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

Два способа, о которых я думал, были:

  • Сохраненный идентификатор базы данных Пользователя в переменной сеанса
  • Сохраненный весь объект пользователя в переменной сеанса

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



  Сведения об ответе

DO__IT

17:28, 22nd August, 2020

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

  1. Если информация пользователя каким-то образом изменится, то вы не будете хранить информацию out-of-date в своем сеансе. Например, если пользователь получает дополнительные привилегии от администратора, то они будут немедленно доступны без необходимости выхода из системы и последующего входа в систему.

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

В большинстве случаев эти проблемы не будут проблемой, и любой подход будет прекрасным.


  Сведения об ответе

PHPH

03:27, 10th August, 2020

В целях безопасности я бы сгенерировал (либо GUID, либо криптографически безопасный RNG) сеанс ID и имел таблицу, которая просто сопоставляет сеанс IDs пользователю IDs. Затем вы просто сохраняете сеанс ID в своих файлах cookie и заставляете его действовать как прокси для идентификатора пользователя.

|Session |UserID |
|--------+-------|
|a1d4e...+ 12345 |
|--------+-------|
|c64b2...+ 23456 |
|--------+-------|

При этом никто не может выдать себя за другого пользователя, угадав его ID. Он также позволяет ограничить сеансы пользователей, так что они должны входить в систему очень часто (обычно две недели). И если вы хотите сохранить другие данные об их сеансе, вы можете просто добавить их в эту таблицу.


  Сведения об ответе

dumai

07:15, 13th August, 2020

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

Лично я храню имя и идентификатор для быстрого ознакомления и извлекаю rest, когда мне это нужно.


  Сведения об ответе

DAAA

15:27, 26th August, 2020

Хранение ID-это лучшая практика в большинстве случаев. Одной из важных причин этого является масштабируемость. Если вы храните объект пользователя (или любые объекты из базы данных, а не только их IDs), вы столкнетесь с проблемами расширения числа серверов, обслуживающих ваш сайт. Для получения дополнительной информации, google for "shared nothing architecture".


  Сведения об ответе

pumpa

09:28, 18th August, 2020

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

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


  Сведения об ответе

davran

15:43, 27th August, 2020

Я думаю, что это зависит от того, какую платформу вы используете. Если вы используете ASP.net, то я бы определенно взглянул на класс FormsAuthentication и все встроенные (и расширяемые) функциональные возможности, которые вы можете использовать для хранения ваших учетных пользовательских настроек.


  Сведения об ответе

ЯЯ__4

22:03, 2nd August, 2020

Обычно я сохраняю пользователя в сеансе. Проблему входа в систему can ' t-change-until можно решить, заменив объект в сеансе новой копией после внесения изменений.


  Сведения об ответе

SSESION

15:21, 8th August, 2020

Наш пользовательский объект довольно легкий, поэтому мы решили сохранить его в переменной сеанса. Не уверен, что это наиболее эффективно, но пока это работает очень хорошо.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться