0

セッション ストアを 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
4

1 に答える 1

0

問題はここにありました:

  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
于 2012-08-20T17:58:30.413 に答える