6

Ruby on Rails(特にv3以降)のセッションライフサイクルについての私の理解は、リクエストの開始時に、リクエストごとにセッションが作成され、そのリクエストに既存のセッションCookieが含まれていない場合は新しいものになるということです。作成されます。それ以外の場合、セッションCookieは逆シリアル化され、セッションハッシュに保存されます。

もちろん、この目的は、CSRFなどの多くのセキュリティ機能をサポートします。

ただし、HTTPキャッシュサービスやVarnishなどのプロキシを使用するサイトでページをキャッシュする場合、ほとんどの構成で要求と応答の両方でこれらの(通常はすべての)Cookieが削除される傾向があるため、これは少し問題になります。終了(キャッシュは通常、一般化されたオーディエンスを対象としているため)。

Cookieの詳細が含まれるオブジェクトハッシュを作成するようにVarnishなどを設定できることは知っています。これにより、キャッシュされたデータがそのセッション(およびそのユーザー)にスコープされますが、これが完全に必要かどうか疑問に思います。

私は本質的にかなり「静的」なアプリケーションを持っています-コンテンツはデータベースからプルされ、キャッシュできるページにレンダリングされます-いくつかの要素(コメント数、「最近の」アイテムなど)がありますESIで追加されましたが、すべてのリクエストに対してRailsは新しいセッションをセットアップする傾向があり、ユーザーがすでにセッションを持っている場合、このようなものはキャッシュサーバーによって削除されます。

(既存の機能を介して、または機能を自分で構築することにより)開発者がセッションが必要なタイミングを制御できるようにすることが可能であり、それが指定されている場合にのみ、Cookieを使用した前後のセッションが可能かどうか疑問に思っています。初期化/逆シリアル化などが必要です。

それ、または私はこの問題について間違った方法で考えており、別の角度から問題に対処する必要があります...

4

2 に答える 2

1

サイトがほとんど静的である場合は、フルページキャッシュを使用することをお勧めします。これにより、Railsはリクエストから完全に除外され、コンテンツが生成されたらWebサーバーで処理できるようになります。ただし、コメント数やユーザー固有のニーズに関しては、正確なニーズによっては深刻な頭痛の種になる可能性があります。

于 2011-02-11T02:46:45.500 に答える
1

私が知っていることから、レールセッションはActionController::SessionManagementを介してかなり詳細に制御できます

http://ap.rubyonrails.org/classes/ActionController/SessionManagement/ClassMethods.html#M000070

API ドキュメントには、アクションごと、コントローラーごとなどに無効にする例があります。

于 2011-01-31T09:35:28.370 に答える