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