Rails用户切换会话

时间:2011-06-15 15:07:45

标签: ruby-on-rails ruby

我已经运行了Rails应用程序,似乎每隔一段时间用户就会从其他用户那里获取cookie session_id值。

我使用active_record_store来跟踪Rails中的会话。

current_user方法:

def current_user
    @current_user ||= session[:user_id] ? User.find_by_id(session[:user_id]) : nil
    return @current_user
end

我使用Apache 2.2.15在Windows机器上运行8个ruby进程。有时它会向用户提供不正确的session_id。我的rails版本是2.1.2

在日志文件中,我可以看到用户更改了其他用户的session_id。 例如:

Processing Manage::TruckController#show (for 179.34.103.8 at 2011-05-12 07:35:24) [POST]
Session ID: 1fbc801bbade1007291901ca810bfeda1eab76
....
Completed

5分钟后会获得不同的会话ID,但属于有效用户。

Processing Manage::TruckController#edit (for 179.34.103.8 at 2011-05-12 07:40:01) [POST]
Session ID: 2f8e84c40c490c509feabbce9701aa9101ba0f
.... 
Completed

对我而言,似乎Rails正在将错误的session_id数据分发给存储在用户的Web浏览器上的cookie。

对此有何建议?

2 个答案:

答案 0 :(得分:0)

the code和。{ the security guide,似乎MD5碰撞的可能性很小。虽然这种情况不太可能发生或者可以重现,所以我更倾向于说这与浏览器测试有关。

我首先要确保您的浏览器没有使用Charles等工具提供这些错误的会话ID。

我还建议尽可能使用cookie会话,以避免出现此类问题。

最后,由于您运行的是相当旧版本的Rails,因此可能值得尝试升级。你可能会遇到一个旧的错误。

答案 1 :(得分:0)

我发现这非常有用。 how-do-i-prevent-rails-users-from-accidentally-authenticating-as-the-wrong-user

如果你是:

  • 在开发中销毁您的数据库 AND
  • 使用开箱即用的Rails secret_token.rb

客户端浏览器将保留一个包含user_id的有效会话,该user_id可能属于该用户,也可能不属于该用户。

我有一个类似的问题并使用类似的代码片段解决了它 this comment by mdesantis on managing Rails secret token