Ruby on Rails で特定のサブドメインから Cookie を取得する方法
概要
Ruby on Rails では、サブドメイン Cookie を制御するために、.domain.com の代わりに sub.domain.com に変更できる :domain などのハッシュ内のオプションを使用して Cookie を削除および設定できます。
私はフロントエンドから Cookie を設定する SPA に取り組んでいますが、その設定されているドメインは app.domain.com であり、ここでメカニズムを変更するのは少し難しいでしょう。 Rails アプリは .domain.com 上の Cookie の 1 つを読み取る必要があるため、もちろん nil を返します。
Rails でサブドメインから Cookie の値を取得する方法はありますか?ドキュメントと Cookie 自体のパブリック メソッドを調べましたが、役立つものは何も見つかりませんでした。
解決策
いいえ、Cookie の設定方法を変更しない限りそれは不可能です。
ドメインを明示的に設定せずに Cookie を設定すると、ブラウザは Cookie をまったく同じドメインにのみ送信し、そのドメインのサブドメインには送信しません。これはブラウザに実装されたセキュリティ機能であり、当然のことながら、ブラウザからサーバーへのリクエストとともに送信されない Cookie にアプリケーションがアクセスする方法はありません。
明示的なドメイン (sub.domain.com など) を使用して Cookie を設定すると、Cookie はそのドメインおよびそのドメインのすべてのサブドメイン (foo.sub.domain.com など) と共有されます。ただし、まだ親ドメインとは共有されていません。
これを機能させる唯一の方法は、Cookie を明示的にdomain.com に設定することです。これにより、この Cookie をdomain.com だけでなく、すべてのサブドメイン (sub.domain.com、foo.sub など) とも共有するようにブラウザーに指示することになります。ドメイン.com、またはサブ2.ドメイン.com。
注: すべてのサブドメイン間で Cookie を共有すると、Cookie の用途によってはセキュリティに重大な影響を与える可能性があります。特に、サブドメインの一部が自分自身ではなくサードパーティによって完全に制御されている場合には顕著です。たとえば、その方法でセッション トークンを共有し、サード パーティの SaaS 製品がサブドメインの 1 つを使用するように構成されている場合、セッション トークンはそのサード パーティのツールと共有されます。