Rails与activerecord共享会话

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

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

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 :: Sessioninheritance自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}") 

在轨道2.3

open config / initializers / session_store.rb

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

更改键上的键值,如下所示:key => '_YOUR_APP_NAME_session'

然后重启你的服务器。

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

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

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