2011-07-13 6 views
3

は、オンラインチュートリアルを踏襲した、私はのように見えるのセッションコントローラがありますログインが仕事をしていますがシンプルなRailsのセッションの質問

class SessionsController < ApplicationController 
    def new 
    end 

    def create 
    user = User.authenticate(params[:email], params[:password]) 
    if user 
     session[:user_id] = user.id 
     redirect_to root_url, :notice => "Logged in!" 
    else 
     flash.now.alert = "Invalid email or password" 
     render "new" 
    end 
    end 

    def destroy 
    session[:user_id] = nil 
    redirect_to root_url, :notice => "Logged out!" 
    end 

end 

これをバックアップするモデル&データベーステーブルは、ありません。ログインしたユーザーのリストを表示する方法はありますか、それは不可能でしょうか?何らかの場所に保存されていない場合、サーバーはどのようにセッションを維持しますか?

答えて

2

これはどう:というフィールドが最後

を見

更新

class ApplicationController 
    before_filter :update_last_seen 
private 
    def update_last_seen 
    current_user.last_seen = DateTime.now 
    current_user.save 
    end 
end 

および最後のX分以内に最後に見たすべてのユーザーに対して検索を実行します。

@online_users = User.find :all, 
         :conditions => ["last_seen > ?",5.minutes.ago.to_s(:db)] 
+1

良いアイデアですが、データベースに過負荷をかけないでください。 +1でも – apneadiving

+0

すばらしいアイデア、うまくいって、ありがとう! – cjm2671

1

デフォルトでは、セッションはCookieベースです。クライアント側であるため、接続されているかどうかを知ることはできません。

原理は次のとおりです。

  • セッションがブラウザで暗号化されて

  • ので、IDのみが

内部に格納されている以上4koを運ぶことができない

クッキー、あなたはもちろんのことができますこのデフォルトの動作を変更し、情報をデータベース、キャッシュなどに格納します。

誰がオンラインになっているかを知ることは、スレッドで既に言及されているように、lastseenパラメータによって推測できます。

注意:この種の機能を使用すると、多くのdbクエリを消費する可能性があります。キャッシュを使用することを推奨します。