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和多个应用服务器。