2013-07-22 154 views
5

當用戶使用Devise註銷時,我想使會話無效,當用戶註銷時我有一個回調來獲得更多的保護以防止會話劫持。如何在Rails/w中註銷時註銷特定會話?

class ApplicationController < ActionController::Base 
    def sign_out(*args) 
    super(*args) 
    reset_session 
    end 
end 

我的理解是,這將刪除存儲在服務器端的會話信息,因此使其無效。

但是我仍然可以使用登錄前獲得的會話ID進行登錄。 我誤解它是如何工作的?我只想讓這個會議無效,而不是全部。

我正在使用session_store的默認值。

+0

你從哪裏得到'session_id'?另外,您還添加了其他會話特定的自定義代碼? – pungoyal

+0

我的印象是,reset_session不需要獲取session_id,我沒有添加任何會影響會話值的自定義代碼。 – Saifis

回答

5

一些google搜索和思考後,我來到這個APON question,它可以進行修改,以適合我的需要,

我所做的就是

application_controller.rb

def sign_out(*args) 
    current_user.update_attribute(:current_sign_in_token, "") 
    super 
    end 

將無效sign_in_token,從而使會話失效,因此劫持會話ID仍然會讓你被踢出去。