Всем привет. Сейчас делаю так, при логине вводится логин и пароль. По логину ищу в базе юзера и сравниваю хеш введенного пароля с хешем в базе. Сохраняю в переменной, с названием абракадаброй, типа user_o8sdg798nqwc398y6, id юзера. Далее, если переменная в сессии есть, значит пользователь залогинен. Этого достаточно или необходимо предпринять еще какие действия? Спасибо.
Сложно сказать однозначно, наверное вы и сами уже поняли. Иначе бы, вечером в воскресение, за истекшее время, вам бы уже ответили. В каких-то проектах, вполне достаточно, а там где сложная иерархия пользователей, да еще и какими-никакими финансовыми отношениями - однозначно нет
Нафиг ваша абракадабра? Сессии за пределы сервера не уходят. Я пишу просто PHP: $_SESSION["current_user"] = $user->id если без фреймворка работаю --- Добавлено --- Как бы, если вы доступ к серверу или шелл профукали, то эта абракадабра уже не поможет. А другими способами что у вас в сессии постороннему человеку не посмотреть --- Добавлено --- Да и айдиха юзера обычно и так на фронте мелькает, и сама по себе, в принципе, не является критически важной инфой
Статей на эту тему море, как верно заметили выше, если кто-то каким-то образом получит доступ к содержимому папки с сессиями, то никакой, даже самый запутанный способ не поможет. Что могу посоветовать - учиться на готовых решениях. Есть масса свободно распространяемых CMS, интернет-магазинов и тп. Смотрите как сделано там. Копируйте, на ваш взгляд, лишнее отбрасывайте. Ну и здравый смысл никто не отменял, если с этим беда, то всё без толку.
https://csplite.com/ru/csp309/ --- Добавлено --- это про способ всё про*ть через ID сессии. данные внутри сессии шифровать вроде бы смысла нет.
Если пользователь разлогинился или сменил пароль в другом браузере, оставлять его авторизованным сомнительно.
А что по вашему разлогинился? Какие действия? Разлогинился и есть удаление сессии, то есть прекращение авторизации. А со сменой пароля в другом браузере, тут или при следующем логине, или при проверки аутентификации также отслеживать смену пароля и при необходимости разлогинивать.
Пользователь может быть авторизован в двух браузерах? Если да, то у него будут разные сессии. Нажав на кнопку logout его во втором браузере также разлогинит?
Это нужно отслеживать самому. Но лично я, не даю логиниться в другом браузере залогиненным пользователям.
Для реализации действия "выход на всех устройствах/браузерах" при смене пароля (или при бане, например), вместо ID пользователя заводят аутентификационный токен. Его можно тоже поместить в сессию, если она используется. Этот токен заводят в базе в специальной таблице. Когда пользователь логинится, т.е. проходит аутентификацию А НЕ АВТОРИЗАЦИЮ, БЛИН, помещаем туда этот случайный токен. Всякий раз когда мы получаем токен из сессии или из заголовка запроса, мы ищем его в таблице и при успехе считаем что пользователь идентифицирован. А когда хотим закрыть все активные сеансы данного пользователя, мы удаляем его токены из таблицы. идентификация: SELECT user_id FROM user_tokens WHERE token=:token нормальный логаут в одном браузере DELETE FROM user_tokens WHERE token=:token логаут на всех устройствах/браузерах: DELETE FROM user_tokens WHERE user_id=:id --- Добавлено --- Сессии в разных браузерах по-любому должны быть разные. Т.е. ID сессии разный. Если кто-то добивается обратного, он пробивает дыру в безопасности. При том что сессии разные, пользователю может быть позволено или запрещено быть залогиненным в нескольких местах одновременно — это определяется политиками безопасности конкретного сервиса.