我讀過Rails 3中的會話是懶加載的,但我沒有看到這種行爲。爲了測試這個,我使用MySQL和activerecord會話存儲創建了一個新的Rails 3.2應用程序。除了V8 JavaScript引擎外,沒有添加任何寶石。然後我用索引操作創建了一個名爲welcome的空控制器。這裏根本沒有代碼。當我打開索引頁面時,我看到在MySQL中的會話表中創建了一個會話。Rails 3 session not lazy loading
我做錯了什麼?我認爲只有我訪問會話纔會創建會話。
我讀過Rails 3中的會話是懶加載的,但我沒有看到這種行爲。爲了測試這個,我使用MySQL和activerecord會話存儲創建了一個新的Rails 3.2應用程序。除了V8 JavaScript引擎外,沒有添加任何寶石。然後我用索引操作創建了一個名爲welcome的空控制器。這裏根本沒有代碼。當我打開索引頁面時,我看到在MySQL中的會話表中創建了一個會話。Rails 3 session not lazy loading
我做錯了什麼?我認爲只有我訪問會話纔會創建會話。
這是從3.0版本開始的Ruby on Rails的默認行爲,我猜。請參閱:
http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf
如果您需要停止在數據庫中機器人/抓取工具創建的會話,這是對我工作:
# 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
我的回答對你有幫助嗎? – scaryguy
是的,謝謝。我開始考慮這個問題,因爲我的會話表在所有網頁抓取工具的製作應用程序中都變得非常龐大。希望能夠以簡單的方式關閉會話(我嘗試過kares session_off但遇到了一些問題)。打算使用cookiestore而不是activerecord存儲,所以我不必一直在db中清理無用的會話。謝謝! – Jason