2008-12-18 103 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'

然後重新啓動服務器的行值。

結果會改變你的店,並失去所有的舊餅乾