2017-02-14 16 views
0

Railsアプリケーションでセッションの有効期限を動的に設定しようとしています。私のローカルではうまく動作しますが(WEBrickで動作します)、プロダクションでは動作しません(ApacheとPassenger 3.0.19を使用)レール2.3.15。セッションの有効期限を変更できません

使用しているRubyのバージョンは1.8.7、Railsのバージョンは2.3.15です。

セッションは、デフォルトでは、このように構成されています

ActionController::Base.session = { 
    :key   => '_my_session', 
    :secret  => 'some_key' 
} 

ActionController::Base.session_store = :active_record_store 

私はクッキーの有効期限があるべき、ユーザーティックときに「私を覚えて」、ウェブサイトへの機能「私を覚えて」を追加しようとしています2週間に設定します。私はローカルでコードをテストするとき

if params[:remember_me] 
    ActionController::Base.session_options[:expire_after] = 2.weeks 
else 
    ActionController::Base.session_options.delete :expire_after 
end 

これは正常に動作します:私は(ページにログインを開く)のウェブサイトへの最初の要求を送信するときには、デフォルトの有効期限とCookieを作成します(その際には、有効期限が切れますブラウザが閉じられる)、次に「私を覚えて」、「ログイン」を押します。私のコードは、有効期限を2週間に設定して実行され、ウェブサイトのメインページにリダイレクトされます。レスポンスに「set-cookie」が表示されるので、2週間後にクッキーが期限切れになるように更新されます。

しかし、乗客を使用するプロダクションにコードをデプロイすると、動作しません。ログインページを開いたときに作成されたデフォルトの有効期限を持つクッキーが表示されますが、 "remember me"サーバーはログインしてメインページにリダイレクトされますが、有効期限が設定された新しいCookieは私に送信されません。

2週間後(動的に変更するのではなく)に期限切れになるように、デフォルト設定を変更すると、基本的にすべてのユーザーが「覚えています」というメッセージが表示され、最初から正しい有効期限のCookieが作成されます。しかし、私が設定を動的に変更すると、それらを無視するように見え、クッキーに反映されません。私はいくつかのログをプロダクションに追加し、ActionController :: Base.session_options [:expire_after]が本当に更新されるのをはっきりと見ることができますが、新しいクッキーは決してクライアントに送られません。 私はグーグルをして、多くのアドバイスに従いましたが、どれも私のために働いていません。

ありがとうございます!

答えて

0

私はこの問題を解決しました。 私は問題を解決するために私を助けたのstackoverflowに便利なリンクを見つけました:http://apidock.com/rails/ActionController/Base は、そのページの最後のコメントは私が今

if params[:remember_me] 
    request.session_options[:expire_after] = 2.weeks 
else 
    request.session_options[:expire_after] = nil 
end 

if params[:remember_me] 
    ActionController::Base.session_options[:expire_after] = 2.weeks 
else 
    ActionController::Base.session_options.delete :expire_after 
end 

を変更し、問題 を解決するために私を助けましたCookieが更新されます。

関連する問題