Ruby on rails Rails 3会话不是延迟加载

Ruby on rails Rails 3会话不是延迟加载,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我已经读到Rails 3中的会话是延迟加载的,但我没有看到这种行为。为了测试这一点,我使用MySQL和activerecord会话存储创建了一个新的Rails 3.2应用程序。除了v8javascript引擎之外,没有添加gems。然后,我创建了一个名为welcome的空控制器,其中包含一个索引操作。这里根本没有代码。当我点击索引页面时,我看到在MySQL的sessions表中创建了一个会话 我做错什么了吗?我以为只有访问了会话才会创建会话。我想这是RubyonRails从3.0版开始的默认行为

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


我做错什么了吗?我以为只有访问了会话才会创建会话。

我想这是RubyonRails从3.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

我已经写了一篇博文,解释了我是如何创建它的,以及为什么它能工作-

是的,谢谢。我开始考虑这个问题,因为我的会话表在一个生产应用程序上变得越来越庞大,所有的网络爬虫都在点击它。希望能找到一种简单的方法来关闭他们的会话(我尝试过关闭kares会话,但遇到了一些问题)。我将研究使用cookiestore而不是activerecord存储,这样我就不必一直清理数据库中无用的会话。谢谢