0

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

难道我做错了什么?我认为只有当我访问它时才会创建一个会话。

4

2 回答 2

1

我猜这是 Ruby on Rails 从 3.0 版开始的默认行为。看:

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

于 2012-10-12T18:05:40.300 回答
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

于 2015-07-13T12:30:09.597 回答