Rails和Authlogic:每个用户只允许一个会话?

有没有办法限制Ruby on Rails应用程序中的会话数量(我使用Authlogic进行身份validation)?

我想每个用户帐户只允许1个会话。 当同一用户登录另一台计算机时,上一个会话应该过期/无效。

我正在考虑将会话数据存储在数据库中,然后在创建新会话实例时将其删除但可能有更简单的方法吗? (配置选项)

我刚刚遇到了一个可能的解决方案,如果你重置presistence令牌,你可以实现预期的行为:

class UserSession < Authlogic::Session::Base before_create :reset_persistence_token def reset_persistence_token record.reset_persistence_token end end 

通过这样做,登录用户的旧会话无效。

之前我按照你的提到实现了它:将一个session_key字段添加到users表中,并确保在登录时为用户存储当前的session_id:

 class UserSession < Authlogic::Session::Base after_save :set_session_key def set_session_key record.session_key = controller.session.session_id end end 

然后在通用控制器中执行类似这样的操作,以便在其他人使用同一帐户登录时踢出用户:

 before_filter :check_for_simultaneous_login def check_for_simultaneous_login # Prevent simultaneous logins if @current_user && @current_user.session_key != session[:session_id] flash[:notice] = t('simultaneous_logins_detected') current_user_session.destroy redirect_to login_url end end 

我正是你所说的,为每个uniq会话分配一个会话ID,将该id存储在一个cookie中,并将相关的会话数据存储在一个表中。 效果很好。 我的目标不是将用户限制为单个会话,而是保持会话变量服务器端以防止用户操纵。