0

私はここで同様の質問をしました

今、私は最後の問題を抱えています。私が使う:

config.action_controller.session_store = :cookie_store

ActionController::Base.session = { 
     #:domain      => :all,
     :key         => 'xxxxxxxx',
     :secret      => 'xxxxxxxxxxx...',
     :expire_after => 5.minutes
      }

これは正常に機能し、実際には5分間非アクティブな状態でCookieを設定します。私が今やろうとしているのは、ログインする前のユーザーがクリックを覚えているときに、タイムアウト値を長くしたいということです。

これは私が使用するログインアクションです:

session_user = User.authenticate(params[:user][:email], params[:user][:password])   
    if session_user

      session[:user] = session_user.id
      @user=User.find(session[:user])
      @user.update_attributes(:last_login_time => Time.now(),:is_logged => true)
      @user.save
      flash[:message]  = "Login successful."
      redirect_to "/admin"
      #cookies[:userd] = {:value => session_user, :expires => Time.now + 12}
      if params[:remember_me]

        #base.request.session_options = request.session_options.dup
        #base.request.session_options[:expire_after]= 10000.minutes
        #base.request.session_options.freeze
        #session[:expire_after] = 96000.seconds.from_now
        #ActionController::Base.session_options[:expire_after] = 1.years
        #session[:expires] = Time.now + 1
      session[:expires_at] = 5.days
      end
    else
      flash[:warning] = "Your email or password is incorrect. Please re-enter."
    end
  end

IF(ユーザーが[覚えておいてください]をクリックしたときに実行)でわかるように、私はさまざまなアプローチを試しましたが、ActionController :: Base.session_options [:expire_after] = 1.yearsを除いて、どれも機能しません。 [expire_after]変数を永続的にオーバーライドしているようです。

私は何をする必要がありますか?

4

1 に答える 1

-1

ActionController::Base 設定をオーバーライドしていませんか? 1年とすれば「永久」ということですか?ブロック内の 5 番目のコメント行以外をすべて削除しIf、次のログインのためにセッションに保存されているものをテストします。5 分以上続く場合は、自分の質問に答えたことになります。

トラブルシューティングのために、ブラウザーから Cookie を削除するかreset_session、ログイン アクションを入力して (Cookie はそのまま残りますが、データは空になります)、次回のログインのためにその行を削除します。

ActionController::Base.session_options[:expire_after] = 1.years

動作するはずです。

于 2013-02-15T14:36:24.270 に答える