Rails与activerecord共享会话

时间:2008-12-18 16:19:11

标签: ruby-on-rails activerecord session

我目前正在使用默认Cookie作为我的单点登录(SSO),但有些用户在推送更新后会遇到奇怪的错误。我正在考虑转移到活动记录来存储会话但是我想知道如何告诉rails这些会话在另一个数据库中?

因此,如果我通过AR在App1DB中存储会话,那么所有其他应用程序如何知道在哪里查找会话?

4 个答案:

答案 0 :(得分:9)

Rails肯定支持支持数据库会话存储。

在config / environment.rb中,取消注释

# config.action_controller.session_store = :active_record_store

检查\ actionpack-2.2.2 \ lib \ action_controller \ session \ active_record_store.rb显示CGI :: Session :: ActiveRecordStore :: Session继承自ActiveRecord :: Base。

所以在config / environment.rb的末尾,你应该可以说

CGI::Session::ActiveRecordStore::Session.establish_connection(
                              :adapter => "mysql",
                              :host => "otherserver",
                              :username => "session_user",
                              :password => "123ABC",
                              :database => "sessions")

CGI::Session::ActiveRecordStore::Session.establish_connection(:sessions)

使用config / database.yml中定义的连接


例如,添加到config / database.yml:

 sessions_development:
   adapter: mysql
   host: otherserver
   username: sessions_user
   password: 123ABC
   database: sessions

添加到config / environment.rb

的末尾
 CGI::Session::ActiveRecordStore::Session.establish_connection("sessions_#{RAILS_ENV}")

答案 1 :(得分:1)

在rails 2.3中

打开config / initializers / session_store.rb

取消注释第ActionController::Base.session_store = :active_record_store

更改看起来像:key => '_YOUR_APP_NAME_session'

的行上的键值

然后重新启动服务器。

结果将更改您的商店,并使所有旧Cookie无效

答案 2 :(得分:0)

会话配置的rails文档(http://api.rubyonrails.org/classes/ActionController/SessionManagement/ClassMethods.html#M000312)表示这些是唯一的选项:http://api.rubyonrails.org/classes/ActionController/Base.html#M000523。由于未列出要使用的数据库的选项,因此可能不存在。

答案 3 :(得分:0)

我们可以对您的问题做一些澄清吗?您是否有多个不同的Rails应用程序要使用相同的会话存储?我问,因为你提到了SSO和多个应用服务器。