会话正在越过. Ruby on Rails

我有一个应用程序正在使用devise进行身份验证. Rails 3在红宝石1.9.2,乘客在nginx顶部.

这是我的问题:我注意到,我的会话越来越多了.在作为一个用户登录时,我有时成为另一个用户.这真是一个可怕的问题.我已经设法让它停止使用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回调中重新连接.

解决方法

我愿意打赌你使用旅客(默认)聪明的产卵,并成为 Spawning Gotcha的受害者.

将您的PassengerSpawnMethod设置为“保守”,看看是否消失.这很容易解释memcache的情况,除非你正在保护它.大概是一个类似的问题(或你的代码).

您是否看到跨物理服务器或仅在一台服务器上的会话?

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...