数日前から、本番サーバーで問題が発生しています。Rails 3.0.20 では、iPhone からの 2 つの JSON リクエスト間でセッションが失われるようです。
ログインは問題ありません。ログで確認できます。
しかし、'pull' と呼ばれる次のメソッドにはセッションがありません。
Started GET "/w/services/pull" for 109.1.101.218 at Tue Sep 24 10:12:43 +0000 2013
Processing by ServicesController#pull as JSON
Parameters: {"locale"=>"w"}
USER_AGENT
app/2.1.1 (iphone; ios 7.0.1; scale/2.00)
SESSION
ご覧のとおり、以下のメソッドではセッションは空です。
def user_required!
logger.info "SESSION"
logger.info session[:user_id]
return true if session[:user_id]
return redirect_to(:controller => "/users", :action => "login")
end
一部のユーザーにとって、セッションが 2 つのリクエスト間で維持されない理由がわかりませんでした。protect_from_forgeryを無効にしようとしましたが、問題は同じです (私の場合、2 番目の要求は GET です...)。
すべてのログ レベルをデバッグに設定しましたが、それ以上の情報はありません。
編集:サーバーでログ時間を使用して、セッションテーブルを見に行きました。失われたセッションが「短縮」されていることがわかります。
通常のセッション データ:
BAh7ByIMdXNlcl9pZGkCZiwiEF9jc3JmX3Rva2VuIjFPKzdRedDd3bHpWcjl6 SGRNNW1NMk4wNjZOYTJEU0R6MmlxdGxDMWRXM25B==
問題があると思われるセッション (短い):
BAh7BjoMdXNlcl9pZGkCThU==
もしかしたら、それが問題の元になるかもしれません...
編集 2: _csrf_token は 2 番目のセッション データの例に作成されませんが、理由はわかりません。