3

Rails アプリを Rails 2 から Rails 4 に直接アップグレード中です/config/initializers/session_store.rb。CookieStore を使用して新しいファイルを使用していますが、何らかの理由でセッションが保存されません。

の行に沿って何かをしようとすると、 render :text => "#{request.session_options[:id]}" 更新ごとに新しいセッション ID を取得します。

さまざまなブラウザーで試しましたが、すべて Cookie を受け入れるはずです。

何が起こっているのかわかりません。これらのセッションが持続しないのはなぜですか?!

編集:あなたの提案に感謝します。もう少し情報と、私が気付いたいくつかのことを以下に示します。

  • まず、私のセットアップについて - Windows 7 マシンの Ubuntu VM で RVM を介して Rails 4/Ruby 2 でサーバーを実行しています。
  • 私は Rails 2 からアップグレードしていますが、これは実際にはモデル/コントローラー/ビューなどにのみ適用されます。すべてのサポート インフラストラクチャに対して新しい Rails 4 アプリケーションを生成しました。
  • セッションを設定してから表示するだけの同じVM上に別のアプリケーションを作成しましたが、それは正常に動作します。
  • セッションが保存しているものは、ユーザーが何をしているかによってわずかに異なりますが、通常は単にユーザー ID (整数のみ) を保持し、場合によってはそれ以上を保持します (OAuth トークンを渡そうとしたときに、これが明らかになることに最初に気付きましたOAuth gem から。)
  • VM のシステム クロックが Windows 7 ホスト マシンのクロックよりも遅れている場合、ユーザー ID セッションが保持されることに気付きました。これは、特に OAuth で他の問題を引き起こしますが、どこかに時間の問題があるようです。環境/development.rbからタイムゾーンを削除するなどのことを試みましたが、それは役に立ちませんでした.
4

3 に答える 3

4

一般的な答えとして、いくつかの問題が考えられます。

  • セッションサイズが 4Kの制限を超えています (これは明らかに事実です)。

    4K を超えるデータを保存しようとすると、CookieOverflow が発生します。

オブジェクトをセッションに保存する場合、オブジェクトは保存前にシリアル化されているため、サイズが大きくなることに注意してください。一般的な問題と特定の問題の可能な解決策の詳細については、こちらをご覧ください。

  • CSRF 保護の問題。

    セキュリティ トークンが予期したものと一致しない場合、セッションはリセットされます

編集:CSRFケースかどうかを確認するには、以下のAbdoのコメントのように、一時的protect_from_forgeryに行を無効にすることができますApplicationController

于 2013-09-02T15:23:36.890 に答える
2

私も似たような症状でした。rails-api gem を追加したため、セッションの保存が完全に壊れてしまったことが判明しました。

于 2015-09-17T02:18:10.557 に答える
0

From: Railscasts エピソード 415 Rails 4 へのアップグレード

シークレット トークンの初期化子で、もう 1 つ構成を変更する必要があります。Rails 4 では、このファイルの構成オプションの名前が secret_token から secret_key_base に変更されました。Rails 3 からの移行中は両方のオプションを指定する必要がありますが、アプリケーションの移行に成功したら、secret_token オプションを削除できます。secret_key_base には別のトークンを使用することをお勧めします。

これは、クライアントに保存されているシリアル化された Cookie から暗号化された Cookie に移行するために必要です。これにより、ユーザーはセッション Cookie の内容を簡単に見ることができなくなります。

このエピソードには、2 から 4 へのアップグレードに関する非常に優れた一連のヒントが含まれており、このチュートリアルを使用してそれをうまく行うことができました。

于 2013-08-27T21:40:28.200 に答える