セッション ストアを ActiveRecordStore に設定しようとしました。次の変更を加えました。
# application.rb
config.action_dispatch.session_store = :active_record_store
# session_store.rb
MyApp::Application.config.session_store :active_record_store
ActiveRecord::SessionStore.session_class = Session
# the session class
class Session < ActiveRecord::SessionStore::Session
belongs_to :user
before_save :ensure_user_is_set
def self.find_by_session_id(session_id)
find(:first,"session_id = ?",session_id)
end
private
def ensure_user_is_set
warden_data = self.data["warden.user.user.key"]
if warden_data
user_id = warden_data[1][0]
self.user = User.find(user_id)
end
end
end
2 つのブラウザー (Firefox と Chrome) を開きました。非常に奇妙なことは、 a を開始しrails console
て : と書くとSession.count
、 が返されること1
です。
その後、Firefox にログインし、Chrome を更新します。両方のブラウザがログインしているように表示されます。何が間違っていますか? 各ブラウザーに独自のセッションがないのはなぜですか?
編集:私のカスタム Session クラスが問題を引き起こしているようです。しかし、その理由はわかりません。
編集2:問題はここにありました:
def self.find_by_session_id(session_id)
find(:first,"session_id = ?",session_id)
end
そして、それは次のようになっているはずです:
def self.find_by_session_id(session_id)
find(:first,:conditions => ["session_id = ?",session_id])
end