我有一个使用设计进行身份验证的应用程序。 Ruby 1.9.2上的Rails 3,乘客在nginx之上。会话正在越过。 Ruby on Rails的
这是我的问题:我注意到,occaisionally我的会议越来越。当作为一个用户登录时,我有时会成为另一个用户。这真是一个可怕的问题。我设法通过使用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?
它看起来像它可能是乘客的问题?但更重要的是,它是如何发生的呢?这是一个REAL大问题。我该如何制止这种情况?
更新3
我现在用的独角兽为我的应用程序。我设置了config.threadsafe!并开始独占使用活动记录会话。没有更多的memcached会话。问题没有了。至少我可以停止拉我的头发,因为安全孔被堵塞了。
我还是想知道究竟是什么导致了它。大部分教程都展示了如何使用默认的产卵方法来设置乘客。当然,我认为memcached会对其他方法的会话管理效果最好。特别是在多应用程序服务器环境中。
更新4
好吧,最后一个和最后的更新。这是使用相同memcached连接的分叉进程的问题。我通过使用dalli memcached客户端修复了它,并在独角兽或乘客的after_fork回调中重置连接。
您使用的是不同的用户在同一个浏览器?还是只是一个完全随机的其他用户,你最近没有用过? – 2011-01-21 13:30:52
未使用同一浏览器的其他用户登录。即使在不同的网络上也会发生这种情况用户A可能成为用户B.即使他们在不同的位置。它是随机发生的,唯一发现的是它们都必须登录才能发生。 – demersus 2011-01-21 15:35:01