这是我的问题:我注意到,我的会话越来越多了.在作为一个用户登录时,我有时成为另一个用户.这真是一个可怕的问题.我已经设法让它停止使用active_record会话存储.但是我感到可怕的发生在哪里.当使用cookie存储和memcached存储时都会发生这种情况.我不知道从哪里开始调试.我已经经历了我的所有代码,我只读’current_user’不写.我没有在会话中存储项目的任何代码.
任何人都可以给我建议,在哪里或怎么发生这种情况?
更新:
我在页面顶部设置一个div,以便在每个请求上转储会话内容.不仅仅是用户切换,而是整个会话.在会话中设置了一些虚拟变量,只是为了看到会发生什么.当会话交叉时(用户A成为用户B),用户A现在看到用户B具有的虚拟变量.用户B注销.
更新2
我在堆栈溢出中发现了另外一个问题,它描述了相同的确切问题:In Rails,what could cause a user to have another user’s session?
看起来可能是乘客问题吗?但更重要的是,它是如何发生的呢?这是一个真正的大问题.我该如何阻止呢?
更新3
我现在正在使用Unicorn来服务我的应用程序.我设置config.threadsafe!并开始专门使用主动记录会话.没有更多的memcached会话.问题消失了至少我可以停止拉我的头发,因为安全漏洞被堵塞了.
我还想知道是什么原因造成的.大部分的教程都显示了如何设置乘客,使用默认的产卵方法.当然,我认为memcached会对其他方法的会话管理表现最好.特别是在多应用服务器环境中.
更新4
好的,最后和最后的更新.这是使用相同memcached连接的分叉进程的问题.我通过使用dalli memcached客户端修复它,并且在独角兽或乘客的after_fork回调中重新连接.
解决方法
将您的PassengerSpawnMethod设置为“保守”,看看是否消失.这很容易解释memcache的情况,除非你正在保护它.大概是一个类似的问题(或你的代码).
您是否看到跨物理服务器或仅在一台服务器上的会话?