безопасный способ создания сеансов в php

Я работаю над веб-сайтом и хочу создать логин и сеанс пользователя. Какой самый безопасный способ проверить, существует ли сеанс или нет (например, проверка файла cookie или сеанса) или любая идея лучше использовать сеансы в php?

session_id() возвращает идентификатор сеанса для текущего сеанса или пустую строку (""), если текущий сеанс отсутствует (текущий идентификатор сеанса отсутствует).

http://de.php.net/manual/en/function.session-id.php

но это просто говорит вам, активен сеанс или нет.

большую часть времени я просто вызываю 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 для идентификаторов, которые пользователь может видеть (и, следовательно, догадываться). хорошо, это уже выходит за рамки вопросов.

Вот несколько руководств по безопасности сеансов

  • Руководство по безопасности PHP: сеансы
  • Замечания по безопасности сеанса PHP
  • PHP Session Security – php | works 2004 (старый, но все же интересный)
  • Безопасность сеанса PHP (PDF)