我注意到每天为多个用户分配相同的session_id。我现在使用的是 php 7.2 ,但是回顾用户会话的历史,这种情况自我使用 php 5.4 以来就一直在发生。
我只是使用session_start()
的php默认值,没有自定义会话处理程序。
我已经了解到session_id
是客户端IP和时间的组合,但是我使用的负载均衡器可能限制了ip_addresses
的随机性?
使用负载均衡器时,增加session_ids唯一性以防止冲突的正确方法是什么?
答案 0 :(得分:0)
如果您使用的是Nginx,则可能需要检查是否启用了FastCGI微缓存并禁用了它。这导致了一些错误,然后在运行nginx的PHP 7.1中的PHP.net开发人员错误列表中指出
错误#75496会话ID冲突发生了几次
在第一种情况(发生冲突)之后,我们更改了php.ini中的哈希熵php设置,因此session_id现在为48个字符,但这无助于防止第二种情况。
解决方案:
nginx上的FastCGI微缓存将200个响应与会话cookie一起缓存。 当然,也许它在我们的服务器上被设置为错误,但是它与PHP毫无关系。
答案 1 :(得分:0)
假设您在每个Web节点上都运行PHP-FPM,但是我想#2和#3可能也可以将PHP作为Apache插件运行。
您在这里有一些选择:
在大多数情况下,第三是最好的选择。