Rails 3会话不是延迟加载

时间:2012-10-12 17:42:36

标签: ruby-on-rails ruby-on-rails-3

我已经读过Rails 3中的会话是延迟加载的,但我没有看到这种行为。为了测试这一点,我使用MySQL和activerecord会话存储创建了一个新的Rails 3.2应用程序。除了V8 JavaScript引擎之外,没有添加任何宝石。然后我用索引动作创建了一个名为welcome的空控制器。这里根本没有代码。当我点击索引页面时,我看到在MySQL的sessions表中创建了一个会话。

我做错了吗?我以为只有在我访问它时才会创建一个会话。

2 个答案:

答案 0 :(得分:1)

这是从Ruby 3.0开始的Ruby on Rails的默认行为。参见:

http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf

答案 1 :(得分:0)

如果您需要停止在数据库中为机器人/抓取工具创建会话,这对我有用:

# Save this file as config/initializers/session_store_ext.rb 
# and don't forget to define BOT_REGEX to match bots/crawlers

class ActiveRecord::SessionStore
  _set_session = instance_method :set_session

  define_method :set_session  do | env, sid, session_data, options |
    unless env['HTTP_USER_AGENT'] =~ BOT_REGEX
      _set_session.bind(self).call env, sid, session_data, options
    end

    sid
  end

  private :set_session
end

我写过一篇博客文章,解释我是如何创建此文章及其工作原因的 - Conditionally Disabling Database Sessions in Ruby on Rails 3