12

私のアプリケーションには、ユーザーがブラウザの別々のタブで別々のアカウントにログインする必要があります (具体的には Chrome をターゲットにしています)。Rails は Cookie を使用してセッション情報を保存するため、ユーザーがログインすると、ブラウザーのすべてのタブでログインされます。ActiveRecord のセッション ストア メソッドを使用していますが、セッションの ID も Cookie として保存されます。

ユーザーがログインしているタブまたはウィンドウに範囲が限定されている HTML5 の sessionStorage メカニズムを使用することに解決策があるようです。私がしなければならないことは、Rails にセッション情報を Cookie ではなく sessionStorage に保存するように指示することだけです。しかし、これに関する情報はまったく見つかりません。

Railsでこれを行うようにセッションストアを構成する方法がないと仮定すると、ActiveRecordセッション保存メカニズムをオーバーライドすることは可能ですか? これについての情報をどこで探すべきかについての指針はありますか?

4

2 に答える 2

2

Cookie とは異なり、sessionStorage エントリは応答ヘッダーで作成できず、要求ヘッダーに自動的に含まれません。これにより、クライアント側の Javascript で sessionStorage/localStorage ベースの認証を管理するための多くの作業負荷がかかります。すべての認証済みアクセスは、認証トークンを明示的に含む Javascript XHR リクエストを介して行う必要があります。

ユーザーが複数の同時セッションを持てるようにしたいが、サイトをSPAとして構築したくない場合は、Cookie を使用する別の方法を採用する必要があります。

1 つの方法は、複数のドメインを使用して Cookie を個別のサブスペースに強制することです。ワイルドカード DNS レコードを設定し、プレフィックスに関係なく、一致するすべての要求を受け入れるように Web サーバーを構成します。たとえば、ユーザーはデフォルトでwww.yoursite.com. ランダムなサブドメインへの新しいタブを開く「新しいセッションの作成」リンクを提供します1234abcd.www.yoursite.com。ただし、SSL を使用している場合は、これにより問題が発生する可能性があります。ワイルドカード SSL 証明書は、はるかに高価になる傾向があります。

より簡単な方法は、独立した Cookie ストアを維持するブラウザーのプライベート モードと icognito モードについてユーザーを教育することです。ただし、ユーザーにドキュメントを読んでもらうことは常に課題です。

于 2017-03-01T17:17:35.840 に答える