Здравствуйтеимеется балансировщик с 6 бэкендами php-fpm 7.0
есть nginx c ip_hashно вот незадача... если у клиента меняется IP он может попасть на другой backend
где с небольшой, но существующей вероятностью попадает в чужую сессиюради эксперимента скопировал со всех бэкендов каталоги сессий и обнаружил
около 200 совпадений на ~ 50 000 сессий
для исправления ситуации были применены следующие настройки:session.hash_bits_per_character = 6
session.hash_function = sha512коллизий стало меньше, но в целом ситуация не решилась
кто как решает подобные задачи?
ps: php 7.0 и обновление до 7.1 в дистрибутиве из официальных источников не предусмотрено :(
> ps: php 7.0 и обновление до 7.1 в дистрибутиве из
> официальных источников не предусмотрено :(Используйте собственный генератор идентификаторов сессий, с контролируемой вами уникальностью хешей, основанной на уникальном значении, заданном в конфиге каждой рабочей ноды или её хостнейме.
1) А что, в php-7.1 это как-то решено?
2) Если там это решено, то обычный путь - это собирать свои пакеты, пусть и на базе дистрибутивных правил сборки.
3) вы поддержали nginx inc финансово? Тогда там есть https://www.nginx.com/products/session-persistence/
4) Еще есть какие-то открытые подобные модули, как описано в https://habrahabr.ru/post/231523/
> 1) А что, в php-7.1 это как-то решено?да, там появились
https://secure.php.net/manual/ru/session.configuration.php#i...
https://secure.php.net/manual/ru/session.configuration.php#i...
А точно генерится та длинна хэша сессии чтов настройках ? В 5 версии пхп модули сессий и хэша приходилось компилить жестко в бинарник пхп, модулем не работало.
> А точно генерится та длинна хэша сессии чтов настройках ? В 5
> версии пхп модули сессий и хэша приходилось компилить жестко в бинарник
> пхп, модулем не работало.да, хэши стали длиннее
может кто подскажет как по правильному общее хранилище сессий организовать?попробовали в memcache, работает -но будет ли гарантироваться там уникальность ключей...
>> А точно генерится та длинна хэша сессии чтов настройках ? В 5
>> версии пхп модули сессий и хэша приходилось компилить жестко в бинарник
>> пхп, модулем не работало.
> да, хэши стали длиннее
> может кто подскажет как по правильному общее хранилище сессий организовать?
> попробовали в memcache, работает -но будет ли гарантироваться там уникальность ключей...Хранилище хранит то, что в него положили.
По одному ключу может храниться только один набор данных.
Гарантировать _уникальность_ задачей _хранилища_ не является.Два бэкенда всё так же могут сгенерировать два одинаковых ключа (второй перезапишет первый).
>около 200 совпадений на ~ 50 000 сессий200 совпадений чего ? имен сессионных файлов ? это у вас клиенты некоторые у которых менялись айпишки передавали уже назначенный PHPSESSIONID и прыгали по бекандам, у sha512 коллизий на 50к итераций (если взять в качестве ключа микросекунды запроса) количество коллизий практически равны нулю.
пс:
http://www.acros.si/papers/session_fixation.pdf
session.use_strict_mode=Onможно ещё юзать централизованное хранилище вроде мемкешеда, либо базы.