2010-12-07 4 views
2

Ruby on Railsアプリケーションのセッション数を制限する方法はありますか(私は認証にAuthlogicを使用しています)?RailsとAuthlogic:1ユーザにつき1つのセッションのみを許可しますか?

ユーザーアカウントあたり1セッションしか許可しません。同じユーザーが別のコンピュータにログオンしている場合、前のセッションは期限切れ/無効化される必要があります。

私はデータベースにセッションデータを保存し、新しいセッションインスタンスが作成されたときに削除することを考えていましたが、おそらく簡単な方法がありますか? (設定オプション)

答えて

0

私はまさにあなたの話をして、各ユニークセッションにセッションIDを割り当て、そのIDをクッキーに保存し、関連付けられたセッションデータをテーブルに保存します。うまくいく。私の目的は、ユーザーを単一のセッションに制限するのではなく、むしろユーザーの操作を防ぐためにセッション変数サーバー側を保つことでした。無効化され、ユーザのログについては、この、古いセッションを行うことにより

class UserSession < Authlogic::Session::Base 
    before_create :reset_persistence_token 

    def reset_persistence_token 
    record.reset_persistence_token 
    end 
end 

2

私はちょうどあなたがリセットされた場合presistenceはあなたが意図した動作を実現することができますトークン、可能な解決策に走りました。あなたが述べたように

以前の私はそれを実装:usersテーブルにSESSION_KEYフィールドを追加し、現在の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 
関連する問題