@DoMa_y_KoTa
Life is too short to remove USB safely..

Реализация правильной опции «запомнить меня» и завершение сеансов удаленно?

Хотелось бы спросить у более опытных людей как создать логин/регистрацию на php с опцией запоминания пароля. Всегда просто записываю в сессию идентификатор пользователя(его айди в базе данных) и всегда просто строю запросы по этому самому идентификатору для выборки нужной информации. Насколько это безопасно? Может ли клиент подменить сессию и как от этого защитится? И по поводу опции с запоминанием сессии, это как сделать безопасно? Может зашифровать айди + время? Хотелось бы узнать самый оптимальный вариант. И также мне всегда нравилось, что сессии можно закрывать удаленно(как это сделано в телеграме). По сути это просто сохраненные ключи в БД? Но как быть, если сессия на клиенте просто пропадет? Заранее спасибо за ответ
  • Вопрос задан
  • 837 просмотров
Решения вопроса 1
myks92
@myks92 Куратор тега PHP
Нашёл решение — пометь вопрос ответом!
Можно сделать токены, как предложил FanatPHP, но есть ещё другой способ:

Хранить сессии в базе данных и работу с сессиями осуществлять через базу данных. Тогда при удалении из базы сеанса пользователь разлогинивается.

Так же можете просмотреть эти материалы: Состояние: Cookies и сессии. и Способы аутентификации. Многое для себя узнаёте и ответите сами на свои вопросы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
Генеришь токен из random_bytes() (ну или UUID) и кладешь его в куки и в базу.
Соответственно получаешь токен из куки и по базе находишь юзера.
Если надо разлогинить, то генеришь новый токен.

Использовать ли при этом сессию - вопрос вкуса, и в общем-то второстепенный. Можно использовать, можно не использовать
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Насколько это безопасно?
Нифига вообще не безопасно, тупо можно перебором всех "попробовать порулить". Большая такая дыра. Ну, пока не заметили - все ок, но кто-то обязательно заметит, 148%.

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

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

Но как быть, если сессия на клиенте просто пропадет?
Сессия (внезапно) не может пропасть на клиенте, по тому как ее там никогда не бывает, бывает там только сессионная кука - ключ к сессии, которая (сессия) - на сервере, так что вопрос в данной формулировке смысла не имеет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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