【发布时间】:2016-04-22 17:09:25
【问题描述】:
我知道像 PHP Session ID Duplication? 和 How unique is the php session id 这样的讨论,但我提出了一个问题,看起来像是重复会话,无法弄清楚可能是什么原因造成的。
有一个 Yii 1.1 应用程序在 PHP 5.5 上运行,设置包括两个 Apache Web 服务器、负载平衡 (BigIp) 和两个用于用户数据缓存和会话处理的 Memcache 服务器。 每天登录该应用的平均流量约为 10,000 名访问者。
在负载平衡器故障转移后报告了第一个事件。然而,从那时起,MySQL 上实现了会话日志记录机制,以跟踪每个登录用户生成的会话,并防止另一个用户使用先前生成的会话登录。
如果捕获到重复会话,则用户将注销并重新生成会话。
到目前为止的结果表明,几乎每天都有至少一两个用户获得重复会话的情况,因此实施的机制开始解决它。
尽管强烈建议此类事件在应用程序的生命周期内极不可能发生,但我仍会监视日志,表明正在发生一些奇怪的事情。我可以就可能导致问题的原因提出一些建议。
我认为可能以某种方式连接的另一个问题是,尽管一个会话在 10 分钟无活动后过期,但经常注意到用户将在 10 分钟内登录 3-4 次,在我看来,这是似乎表明内存缓存随机丢失会话。
该设置不使用粘性会话,这意味着每个用户请求都在服务器 1 或服务器 2 上随机提供。
看起来像
- 资源设置问题? (Apache、BigIP 等?)
- 应用程序问题?一遍又一遍地生成相同的会话?
- 内存缓存问题?
- 还有别的吗?
我进行了一些进一步的搜索,发现了一个我认为更适合我描述的术语:“会话交叉”。
【问题讨论】:
-
嗨,如果您没有在 LB 中使用粘性会话并将会话数据保存在内存缓存中,那么将会话数据仅保存在其中一个服务器中可能是个好主意。也许这就是“10分钟内登录3-4次”的原因。 (见serverfault.com/questions/164350/…)。此外,memcache 可能会丢失数据(当 memcache 空间已满时)
-
我提到了粘性会话案例,因为我已经看到很多关于这种方法的参考资料,但是,我认为当 memcached 处于“游戏”中时,您不必“担心”这一点。 . 虽然在我描述的情况下,似乎不能正常工作 100%
标签: php apache session yii memcached