会话正在越过. Ruby on Rails

前端之家收集整理的这篇文章主要介绍了会话正在越过. 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的情况,除非你正在保护它.大概是一个类似的问题(或你的代码).

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

猜你在找的Ruby相关文章