5

config/initializers/session_store.rb ファイルに次の内容を持つ Rails アプリがあります。

ActionController::Base.session = {
  :key         => '_app_session',
  :secret      => 'a really long string here',
  :expire_after => 2.minutes
}

ActionController::Base.session_store = :active_record_store

したがって、通常の操作では、セッションごとにデータベースに作成された ActiveRecord オブジェクトが表示されます。問題は、リクエストに対して常にセッションを作成したいわけではないということです。自動化されたリクエストに対してセッションの作成をオフにできるようにしたいと考えています。データベースには、自動化されたリクエストごとに 1 つずつ、何千ものセッション レコードがあります。Rails 2.3.3 より前では、次のことが可能でした。

class ApplicationController < ActionController::Base
  session :off
  ...
end

しかし、Rails 2.3.3 では "session :off" が非推奨になりました。これは、セッションが遅延ロードされるようになったためです。セッションを使用しない場合、セッションは作成されません。問題は、セッション オブジェクトが常に sessionstore.rb ファイルに割り当てられているため、常に作成されているようです。構成ファイルからセッション割り当てブロックを削除すると、自動化された要求の後にセッション レコードが表示されません。私の質問は、リクエストが自動化されていない場合にのみセッションを条件付きで割り当てることができるように、session_store.rb からセッション ハッシュへの構成割り当てを ApplicationController クラス (または他の場所) に移動するにはどうすればよいですか? コントローラー ハンドラーが実行される前に、セッション構成データが必要になるのではないかと心配しています。セッションキー値の割り当てはどこに置くのですか?

助けてくれてありがとう。

4

2 に答える 2

1

config / initializersは1回限りの構成であり、通常、起動時に1回だけ実行されます。ドキュメントによると、遅延読み込みは、リクエスト中に「セッション」オブジェクトがタッチされた場合にのみセッションを初期化します。

リクエストサイクルでセッション変数にまったく触れないことを確信していますか?(つまり、フィルター、アクション、ヘルパー、またはテンプレート内)。また、セッションオブジェクトには、それらが作成された場所についてヒントを与える可能性のあるコンテンツが含まれていますか?

于 2009-09-16T10:34:51.037 に答える
0

「遅い」回答で申し訳ありませんが、ここに着陸する人々に関連していると思います。session :offRailsから削除されて以来、同様の問題に苦しんでいました。

Rails 2.3+ のプラグインとして「バックポート」することにしましたhttps://github.com/kares/session_off

于 2011-06-06T11:19:05.220 に答える