session_regenerate_id (): Идентификаторы сеанса на самом деле являются просто большими случайными числами. PHP реализует свои идентификаторы сессий как очень случайные, чтобы люди не могли просто угадать или увеличить действительный идентификатор сессии. Тем не менее, если злоумышленник получит действительный идентификатор сеанса, он может «захватить» ваш сеанс. Изменение идентификатора сеанса действительного сеанса действительно не решает эту проблему. Вам необходимо добавить еще один уровень безопасности, возможно, связав IP-адрес клиента с идентификатором сеанса. Таким образом, вы можете почти опубликовать идентификатор сеанса (не рекомендуется), но злоумышленник не сможет воспользоваться этим, поскольку он не сможет завершить TCP-соединение с поддельным IP-адресом.
Если пользователь не хочет уничтожить сеанс и просто закрыть браузер, файлы сеанса, похоже, навсегда останутся в системе.
Сеансовый cookie будет оставаться на клиентском компьютере до тех пор, пока его браузер не решит, что его срок действия истек Я думаю, что время по умолчанию составляет 24 минуты. Файл сеанса будет оставаться на сервере до тех пор, пока он не будет собран сборщиком мусора сеанса PHP.
Я хотел бы знать, как 1) заставить сеансы умереть через X часов, даже если пользователь активен. Это может контролироваться параметром конфигурации PHP: session.gc-maxlifetime . Обратите внимание, что вы также захотите изменить другие параметры session.gc для принудительной очистки. См. Также .
Это также применимо, если пользователь бездействует.
РЕДАКТИРОВАТЬ: Я прочитал это неправильно. Это не относится к активному пользователю. Для активного пользователя вам придется вручную следить за тем, как долго он вошел в систему, и «выйти из него».
Я заметил, что если я изменяю cookie сеанса перед входом в систему, тот же файл сеанса сохраняется в папке файлов сеанса (пустой) в дополнение к новому сгенерированному идентификатору с информацией пользователя Я не уверен, что это значит. Может быть, вы могли бы уточнить.
Правильно ли я уничтожаю сеансы?
На самом деле, нет. Вы также можете попытаться заставить клиента удалить свой файл cookie сеанса, прежде чем удалить файл cookie на стороне сервера. Это упоминается здесь .
Как последнее замечание, я не уверен, что проверка на USER_AGENT клиента является хорошей идеей, особенно потому, что ее довольно легко подделать. Следует рассмотреть возможность проверки полного (не хешированного) IP-адреса, поскольку для этого требуется трехстороннее рукопожатие. (Обратите внимание, что это все еще уязвимо для атак MITM, если вы не общаетесь через SSL)