7

session[:hash_name]ユーザー名などのセッション情報を保持するために、Ruby on Rails で作業しています。

ユーザーがログアウトせずにこのセッションを期限切れにする方法を見つけようとしています。特に 2 つの場合: しばらくしてから有効期限が切れる必要がある場合と、ユーザーがブラウザーを閉じた場合です。

これまでのところ、しばらくすると期限切れになる別のパラメーターが見つかりました。cookies[:hash_name]しかし、すべてのユーザー要求でこのパラメーターをチェックしてから reset_session を呼び出す方法がわかりません。セッションがリセットされたら、ユーザーをログイン ページにリダイレクトする必要があります。

これら 2 つの問題を解決するための提案は大歓迎です。

4

3 に答える 3

1

それを実行するとセッションが破壊されることは確かですがsession.delete(:hash_name)、特に最も基本的な機能を構築するのに何時間もかかる場合は、独自の認証システムを構築しようとしないことを強くお勧めします。ビルドされたソリューションは 20 分でインストールできます。それだけでなく、ビルド済みのソリューションは、無数の開発者によってテストおよびテストされているため、自分で調理できるものよりもおそらく 2 倍安全です。

認証にdeviseを使用することを強くお勧めします。sign_out(current_user)デバイスを使用すると、リクエストを行ったユーザーを明らかにサインアウトするなどのメソッドを取得できます。Deviseのgithubページを見てください

必要なのはgem install devise、gemfile に追加して実行するだけです

rails g devise:install User # or whatever model name

そして、彼らは残りを処理します

于 2013-04-06T19:37:43.930 に答える
0

独自のカスタム認証方法を使用していると思います。そのため、シナリオ 1 (つまり、セッションが数回後に期限切れになる) の場合、以下に示すようなことを行うことができます。

def create_session
  if session[:hash_key]
    destroy_session if session[:last_login] < 10.minutes.ago
    session[:last_login] = Time.now
  else
    ... authenticate
    session[:last_login] = Time.now
  end
end

def destroy_session
  reset_session
end

シナリオ 2 (つまり、ブラウザーを閉じたとき) では、use jquery イベント ハンドラーを呼び出すことができ、以下のようなことができます。

$('window').unload(function(){
  //call to destroy session method
});
于 2013-04-08T11:11:16.877 に答える