Я работаю над веб-сайтом и хочу создать логин и сеанс пользователя. Какой самый безопасный способ проверить, существует ли сеанс или нет (например, проверка файла cookie или сеанса) или любая идея лучше использовать сеансы в php?
session_id()
возвращает идентификатор сеанса для текущего сеанса или пустую строку (""), если текущий сеанс отсутствует (текущий идентификатор сеанса отсутствует).
но это просто говорит вам, активен сеанс или нет.
большую часть времени я просто вызываю session_start();
в начале каждого скрипта (даже если пользователь не вошел в систему). при входе в систему я устанавливаю $_SESSION['user']
с идентификатором пользователя или пользователем. при выходе из системы я просто unset($_SESSION['user']);
, путем проверки empty($_SESSION['user'])
я могу проверить, не был ли кто-то еще зарегистрирован или нет. не делайте этого, если вы храните информацию, зависящую от пользователя, в другом месте вашего сеанса, иначе следующий участник регистрации может получить информацию, которую он не должен видеть (в этом случае используйте session_destroy();
).
но безопасность? просто деактивируйте распространение идентификатора сеанса с помощью переписывания URL-адресов GET / POST (только куки), поэтому они не попадают в URL-адреса, которые могут быть кэшированы или распространены среди других (в этом случае захват сеанса будет возможен). вы можете это сделать, установив session.use_only_cookies
в php.ini.
могут возникнуть дополнительные проблемы с безопасностью, если вы размещаете на ненадежном и / или неправильно сконфигурированном общем сервере – это может привести к тому, что другие люди на одной машине прочитают ваши данные сеанса. в этом случае вы можете сохранить данные сеанса в базе данных, переписав обработчик сеанса. просто найдите session handler mysql
на межтрубках, я уверен, что есть достаточно готовых решений. и не храните конфиденциальную информацию, такую как пароли в сеансе, лучше выполняйте запрос каждый раз, когда вам нужно его сравнить.
кроме этого … используйте ssl / https для входа и управления пользователями, поэтому никакие пароли открытого текста не передаются. хранить в базе данных только pw-хэши с солью. не позволяйте никому видеть пароли (это означает: никогда не печатайте их в html или электронную почту). не используйте значения auto_increment для идентификаторов, которые пользователь может видеть (и, следовательно, догадываться). хорошо, это уже выходит за рамки вопросов.
Вот несколько руководств по безопасности сеансов