2008-12-18 106 views
6

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

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

回答

9

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

在到config/environment.rb,取消

# config.action_controller.session_store = :active_record_store 

检查\ ActionPack的-2.2.2 \ LIB \ action_controller \会议\ active_record_store.rb表明CGI ::会议::为ActiveRecordStore ::会议从继承的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) 

使用Connect在配置定义/ database.yml的


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

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

添加到配置月底/ environment.rb中

CGI::Session::ActiveRecordStore::Session.establish_connection("sessions_#{RAILS_ENV}") 
+1

对于Rails 3中,这就是:`的ActiveRecord :: SessionStore :: Session.establish_connection` – 2012-01-16 17:19:01

0

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

1

在Rails 2.3

打开配置/初始化/ session_store.rb

取消对该行ActionController::Base.session_store = :active_record_store

更改该键的上,它看起来像:key => '_YOUR_APP_NAME_session'

然后重新启动服务器的行值。

结果会改变你的店,并失去所有的旧饼干