在Rails中,什么原因会导致一个用户获得另一个用户的会话?

3
我有一个Rails应用程序,使用未经修改的Restful Authentication身份验证系统。
用户报告发现自己作为错误的用户登录。至少在其中一种情况下,是在他们的第一个页面视图上,之前从未登录过。
他们的会话ID是否可能混淆了?如果切换到CookieStore,这种情况是否不可能发生,因为不会以这种方式存储任何会话数据?
我怀疑问题与Passenger有关,但我不知道从哪里开始调试。它只发生了几次,在几个月的运行时间内仅发生了4次,所以几乎无法重现。
环境: ActiveRecord会话存储 Rails 2.2.2 Passenger 2.0.1 Apache 2 Ruby 1.8.6
非常感谢。

你有没有找到解决这个问题的方法? - Eric
3个回答

0
我曾经遇到过类似的问题,原因是用户被存储在类变量而不是实例变量中。例如,如果您像这样进行身份验证/存储用户:
  def current_user
    User.current ||= ( login_from_session || login_by_password )
  end

在这种情况下,用户将被存储在类中而不是实例中,第一个登录的用户将被存储在类中,并且将传递给下一个用户的会话。为了解决这个问题,这已经被更改为:
def current_user
  @current_user ||= ( login_from_session || login_by_password )
end

当然,这只是众多可能性之一,但我会从将会话中的user_id和您使用的user变量都写入日志开始进行故障排除,以查看是否存在任何差异。


0

0

如果您使用客户端会话存储(新版本Rails的默认设置),那么可能是应用程序中的错误,而不是被盗的会话(或类似的情况)。请确保您知道使用哪种会话存储方式以及它的工作原理。


我不确定我是否理解这里的逻辑...无论会话是序列化到cookie中(当前默认值)还是生成一个id并将其放入数据库中,唯一的方式是如果服务器发送了错误的cookie(无论是会话id还是完全序列化的会话),那么有人会获取另一个人的会话,这种可能性不会取决于存储介质。但是,也许我在这里忽略了什么? - Tom Lianza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接