gpt4 book ai didi

ruby - session 越过。 Rails 上的 Ruby

转载 作者:数据小太阳 更新时间:2023-10-29 06:34:49 26 4
gpt4 key购买 nike

我有一个使用 devise 进行身份验证的应用程序。 ruby 1.9.2 上的 Rails 3,passenger 位于 nginx 之上。

这是我的问题:我注意到有时我的 session 会交叉。在以一个用户身份登录时,我有时会成为另一个用户。这真是一个可怕的问题。我已经设法通过使用 active_record session 存储让它停止。但我对它可能发生的地方感到困惑。它在使用 cookie 存储和 memcached 存储时都会发生。我不确定从哪里开始调试。我已经完成了我所有的代码,而且我只是从“current_user”中读取而不是写入。我没有任何代码在 session 中存储项目。

任何人都可以给我建议,告诉我这可能发生在何处或如何发生吗?

更新:

我在页面顶部设置了一个 div 以转储每个请求的 session 内容。这不仅仅是用户切换,而是整个 session 。我在 session 中设置了一些虚拟变量,只是为了看看会发生什么。当 session 交叉时,(用户 A 成为用户 B)用户 A 现在看到用户 B 拥有的虚拟变量。并且用户 B 已注销。

更新 2

我在这里发现了另一个关于堆栈溢出的问题,它描述了同样的问题:In Rails, what could cause a user to have another user's session?

看起来可能是乘客问题?但更重要的是,它怎么会发生呢?这是一个真实的大问题。我该如何阻止这种情况?

更新 3

我现在正在使用 Unicorn 来为我的应用提供服务。我设置了config.threadsafe!并开始专门使用事件记录 session 。没有更多的 memcached session 。问题消失了。至少我可以停止拉扯我的头发,因为安全漏洞被堵住了。

我还是想知道到底是什么原因造成的。大多数教程都展示了如何使用默认生成方法设置乘客。自然地,我认为 memcached 在 session 管理方面的表现优于其他方法。尤其是在多应用服务器环境中。

更新 4

好的,最后也是最后的更新。这是使用相同 memcached 连接的 fork 进程的问题。我通过使用 dalli memcached 客户端并在 unicorn 或 passenger 的 after_fork 回调中重置连接来修复它。

最佳答案

我敢打赌你正在使用 Passenger 的(默认)智能产卵,并成为 Spawning Gotcha 的受害者。 .

将您的 PassengerSpawnMethod 设置为“保守”,看看这是否会消失。这很容易解释 memcache 的情况,除非您正在防范它。大概是设计(或您的代码)中的类似问题。

您看到 session 跨物理服务器,还是只在一台服务器上?

关于ruby - session 越过。 Rails 上的 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4755047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com