2013-08-19 26 views
11

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

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

Railsでこれを行うようにセッションストアを設定する方法がないと仮定すると、ActiveRecordセッション保存メカニズムをオーバーライドすることは可能ですか?どのようにこれについて行くかについての情報を探すためのポインタ?

+1

この質問に対する回答を見つけましたか? – Marklar

答えて

-1

Cookieベースのセッションストアは、初期設定でconfig/initializers/session_store.rbに設定されています。 Rails 3では、セッションストアはミドルウェアであり、設定オプションはconfig.session_storeへの単一の呼び出しで渡されます:

:: Application.config.session_store:cookie_store、:key => '_session '

ハッシュで必要なオプションを追加することができます。

Your::Application.config.session_store :cookie_store, { 
    :key =>   '_session_id', 
    :path =>   '/', 
    :domain =>  nil, 
    :expire_after => nil, 
    :secure =>  false, 
    :httponly =>  true, 
    :cookie_only => true 
} 
+0

ここでセッションストアを設定していて、ActiveRecordセッションストアを使用しています。私はこれをどうやってクッキーではなくHTML5のsessionStorageに保存するのですか? –

1

cookieとは異なり、sessionStorageエントリはレスポンスヘッダーでは作成できません。リクエストヘッダーに自動的には含まれません。これにより、クライアントサイドのJavascriptでのsessionStorage/localStorageベースの認証を管理するための作業負荷がかかります。認証されたすべてのアクセスは、明示的に認証トークンを含むJavascript XHR要求を経由する必要があります。

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

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

より簡単な方法は、独自のCookieストアを維持するブラウザの非公開/ icognitoモードについてユーザーに教えることです。しかし、ユーザーに文書を読ませることは常に挑戦です。

関連する問題