2011-02-19 2 views

答えて

5

でクッキーのマニュアルを参照してください。セッションのクッキーはブラウザの再起動の間に持続しないので、アプリケーションにユーザーが誰であるかを示す他の種類のクッキーを使用する必要があります。最も一般的には、私の機能を覚えておくことは、ユーザーがアプリケーションに覚えてほしいと選択させることによって実現されます。その場合、そのユーザーのパスワードとして機能するCookieを作成する必要があります。通常、次の操作を実行します。

  • ユーザーがアクセスまたは表示できない属性を選択します。たとえば、自分のアカウントが作成されたとき、またはランダムに生成された文字列を格納するときなどです。
  • この属性をハッシュして、Cookie値を認識できないようにします。ここで

例です。

identifier = current_user.id 
value = Digest::SHA1.hexdigest(current_user.created_at)[6,10] 

cookies['remember_me_id'] = {:value => identifier, :expires => 30.days.from_now} 
cookies['remember_me_key'] = {:value => value, :expires => 30.days.from_now} 

は最後に、ユーザーがログインしている場合は、チェックしているとき、あなたは彼らが同様に覚えてクッキーを使用してログインしているかどうかを確認する必要があります。例:

def current_user 
    current_user ||= login_from_session || login_from_cookie 
end 

def login_from_session 
    current_user = User.find(session[:id]) unless session[:id].nil? 
end 

def login_from_cookie 
    user = User.find(cookies['remember_me_id']) 
    if cookies['remember_me_key'] == Digest::SHA1.hexdigest(user.created_at)[6,10] 
    current_user = user 
    else 
    nil 
    end 
end 

これにより、ブラウザを再起動しなくてもCookieを実装できるようになります。

+0

レール認証フレームワーク(Deviseなど)の中には、この機能のサポートが組み込まれている点があります。これらを最初から構築するのではなく、真剣に検討する価値があります。 –

4

あなたのクッキーが永遠に続くようにしたい場合は、あなたが行うことができます:

cookies.permanent[:foo] = "bar" 

は行うための最善のことは私に覚えているクッキーと呼ばれるものを使用することであるhttp://api.rubyonrails.org/classes/ActionDispatch/Cookies.html

関連する問題