web-dev-qa-db-ja.com

サブドメイン間でlocalStorageを使用する

私は、それをサポートできるブラウザ(IE以外)でCookieを localStorage に置き換えています。問題はsite.comおよびwwwsite.com独自の個別のlocalStorageオブジェクトを保存します。 wwwはサブドメインと見なされます(あなたが私に尋ねると、愚かな決定です)。ユーザーが元々site.comで、wwwsite.com彼女の次の訪問では、彼女の個人データはすべてアクセスできなくなります。すべての「サブドメイン」を取得して、メインドメインと同じlocalStorageを共有するにはどうすればよいですか?

75
JoJo

これは私がドメイン間でそれを使用する方法です...

  • 親ドメインのiframeを使用する-parent.comを言う
  • 次に、各child.comドメインで、parent.com iframeにpostMessageを実行します
  • 必要なことは、postMessageメッセージを解釈してparent.com iframeと通信する方法のプロトコルを設定することだけです。

私はそれが役立つことを願っています:)

75
Mayank Jain

この特定の問題のためだけにiframeとpostMessageソリューションを使用している場合、データをサブドメインのないCookieに保存し、ロード時にlocalStorageにない場合は、Cookieから取得します

長所:

  • 追加のiframeとpostMessageをセットアップする必要はありません。

短所:

  • すべてのサブドメイン(wwwだけでなく)でデータを利用できるようにするため、すべてのサブドメインを信頼していない場合は機能しない可能性があります。
  • 各リクエストでデータをサーバーに送信します。素晴らしいとは言えませんが、シナリオによっては、iframe/postMessageソリューションよりも作業が少ないかもしれません。
  • あなたがこれをしているのであれば、なぜクッキーを直接使用しないのですか?コンテキストに依存します。
  • 4Kの最大Cookieサイズ、ドメインのすべてのCookieの合計(コメントでこれを指摘してくれたBlakeに感謝)

私は他のコメント者にも同意しますが、これはlocalStorageの指定可能なオプションであるように思われるため、回避策は必要ありません。

32
Matt

一貫性とこのような問題を回避するために、site.comをwww.site.comにリダイレクトすることをお勧めします。

また、各ブラウザのネイティブストレージを使用できる PersistJS などのクロスブラウザソリューションの使用を検討してください。

26
Eran Galperin

私はxdLocalStorageを使用しています。これは、LocalStorageインターフェースを実装し、iframeポストメッセージ通信を使用してクロスドメインストレージをサポートする軽量のjsライブラリです。(angularJSサポート)

https://github.com/ofirdagan/cross-domain-local-storage

3
biology.info

これが私のウェブサイトでの解決方法です。 wwwのないすべてのページをwww.site.comにリダイレクトしました。この方法では、www.site.comのlocalstorageが常に使用されます

ルートディレクトリの。htacess(まだ持っていない場合は作成)に以下を追加します。

RewriteEngine On
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_Host}/$1 [R=301,L]
0
Ayush Baheti