两个浏览器共享相同的会话?怎么会这样?

时间:2012-07-06 09:11:38

标签: ruby-on-rails ruby session

我尝试将会话存储设置为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)。非常奇怪的是,如果我开始 一个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

1 个答案:

答案 0 :(得分: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