我知道像PHP Session ID Duplication?和How unique is the php session id这样的讨论,但是我想出了一个问题,这个问题看起来像重复的会话,但我不知道是什么原因造成的。
有一个运行在PHP5.5上的YII1.1应用程序,该设置包括两个Apache服务器,负载平衡( Load Balanced,BigIp),以及两个用于用户数据缓存和会话处理的Memcache服务器。平均每天的访问量约为10,000人,登录应用程序。
第一次事故是在负载平衡器故障转移后报告的。但是,从那时起,MySQL上就有了会话日志机制实现,以便跟踪每个登录用户的生成会话,并防止另一个用户使用以前生成的会话进行登录。
如果捕获重复会话,则将用户注销,并重新生成会话。
到目前为止,结果表明,几乎每天都有至少一到两个用户获得重复会话的情况,因此实现的机制可以解决这个问题。
尽管有人强烈建议这样的事件在应用程序的生命周期中是非常不可能实现的,但我仍然监视日志,表明正在发生一些奇怪的事情。我需要一些关于什么会导致这个问题的建议。
另一个我认为可能有某种联系的问题是,虽然一个人的会话在没有活动10分钟后就过期了,但人们经常会注意到,一个用户在10分钟内登录了3-4次,在我看来,这似乎是内存缓存随机丢失会话的迹象。
安装程序不使用粘性会话,这意味着在服务器1或服务器2上随机处理每个用户请求。
看上去像是
我做了一些进一步的搜索,我发现这个词更适合我所描述的:“会话交叉”。
发布于 2016-01-17 19:54:36
问题是要给出一个具体的答案,通过检查系统和改变事物来获得更多的信息。
如果您不使用粘性会话,那么您的会话存储必须共享,也许memcache运行了两次?
尝试粘稠的会话,看看它是否会产生不同的效果。
尝试其他会话存储,例如,将文件与粘性会话放在一起。
检查会话的随机性,也许随机生成器是通过设置相同的种子来欺骗的。有时,它有助于切换php的执行方式->fcgi。
祝好运
发布于 2016-01-17 20:04:57
实际上只是在想。会话数据存储在文件中。只要该会话文件存在,会话就处于活动状态。因此,您可以确定是否正在使用特定的会话id。
所以你能做的是:
警告,这是一种实用的方法,我希望PHP不应该得到重复的会话id,当这种情况发生时,应该将PHP项目报告为要修复的bug。
发布于 2016-01-17 20:09:49
您的memcache服务器是如何连接的?他们都是用来读和写的吗?用什么策略?
我还从Redis那里知道,当内存不足时,它(随机)会丢弃键,也许memcache也有类似的东西?
https://stackoverflow.com/questions/34839325
复制相似问题