Несколько коллизий PHPSESSID - PullRequest
       2

Несколько коллизий PHPSESSID

0 голосов
/ 25 августа 2018

Я заметил, что нескольким пользователям в день назначается один и тот же session_id.Я использую php 7.2 сейчас, но, оглядываясь назад на историю пользовательских сессий, это происходило с тех пор, как я использовал php 5.4 .

Я просто использую phpзначения по умолчанию session_start(), пользовательский обработчик сеанса отсутствует.

Я прочитал, что session_id - это комбинация ip и времени клиента, но я использую балансировщик нагрузки, который может ограничиватьслучайность ip_addresses?

Как правильно увеличить уникальность session_ids для предотвращения коллизий при использовании балансировщика нагрузки?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Предполагается, что вы запускаете PHP-FPM на каждом веб-узле, но я думаю, что # 2 и # 3, вероятно, будут работать и на PHP как плагин Apache.

У вас есть несколько вариантов здесь:

  1. Держите ваши веб-узлы LB'd с помощью Apache и каждый из них указывает на один и тот же вышестоящий сервер PHP-FPM. Очевидно, что третий блок, выполняющий один процесс PHP-FPM, возможно, должен быть более мощным, поскольку он обрабатывает синтаксический анализ PHP для обоих веб-узлов.
  2. Измените хранилище сеанса так, чтобы оно указывало на местоположение файла (возможно, на общий ресурс NFS или SMB), к которому могут обращаться оба сервера. Не уверен, что когда-либо делал это честно, но похоже, что это сработает. Действительно, ваши веб-файлы, вероятно, уже должны быть в общей папке NFS / SMB, чтобы вы могли развертывать изменения только в одном месте.
  3. Раскрутите сервер Redis и сделайте так, чтобы процесс PHP-FPM обоих веб-узлов использовал его для сеанса.

Номер три, вероятно, лучший вариант в большинстве случаев.

0 голосов
/ 25 августа 2018

Если вы используете Nginx, вы можете проверить, включено ли микро-кеширование FastCGI, и отключить его.Это вызвало некоторые ошибки, прежде чем отмечалось в списках ошибок разработчиков PHP.net в PHP 7.1 с запущенным nginx

Ошибка # 75496 Session ID Столкновение произошло несколько раз

После первого случая [столкновения] мы изменили настройки php.ini для хеш-энтропии, поэтому session_id теперь составляет 48 символов, но это не помогло предотвратить второй случай.

Решение:

FastCGIмикро кеширование в nginx, которое кэшировало 200 ответов вместе с сессионными cookieКонечно, возможно, на нашем сервере это было неправильно, но это определенно не имеет ничего общего с PHP.

Пожалуйста, смотрите: https://bugs.php.net/bug.php?id=75496

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...