7

我想在用户使用 Devise 注销时使会话无效,当用户注销时我有一个回调要捕获,以更好地防止会话劫持。

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

我的理解是,这将删除存储在服务器端的会话信息,从而使其无效。

但是,我仍然可以使用退出前获得的会话 ID 登录。我误解了它是如何工作的吗?我只想使这个会话无效,而不是全部。

我使用 session_store 的默认值。

4

1 回答 1

6

经过一番谷歌搜索和沉思后,我提出了这个问题,可以对其进行修改以满足我的需要,

我所做的只是

application_controller.rb

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

这将使 sign_in_token 无效,从而使会话无效,因此劫持会话 id 仍然会使您被踢出局。

于 2013-07-30T07:17:28.000 回答