2015-10-24 102 views
1

我有一個Rails應用程序,我使用activerecord-session_store將會話存儲在數據庫中。我想阻止沒有登錄的用戶創建會話,因爲現在每個訪問hte站點首頁的爬網程序都會獲得一個持續存在於數據庫中的會話。如何防止Rails創建會話?

我的應用程序使用Rails 4.2.0,activerecord-session_store 0.1.1和Devise 3.5.2。

回答

1

會話創建由Rack處理,commit_session method in Rack::Session::Abstract::ID提供了一個選項來放棄會話。我在ApplicationController寫了一個過濾方法丟棄會話如果沒有定義設計的current_user

after_filter :skip_session 

def skip_session 
    unless current_user 
    request.session_options = {drop: true} 
    end 
end 

這可以防止會話創建,但仍允許會話用於用戶登錄。這甚至允許用戶登錄(非常重要) - 他們在沒有會話的情況下訪問登錄頁面,但在運行此過濾器之前提交表單Devise設置current_user,從而創建會話。

1:實際上,會話已創建並且未提交;在我的情況下,提交到數據庫,但如果您使用Rails的默認cookie會話,這將阻止發送會話cookie。