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


95

それをサポートできるブラウザー(IE以外のすべて)で、cookieをlocalStorageに置き換えます。問題はsite.comwwwです。site.comは、独自の個別のlocalStorageオブジェクトを格納します。wwwはサブドメインと見なされていると思います(私に尋ねるとばかげた決定です)。ユーザーが元はsite.comにいてwwwと入力することにした場合。次の訪問時にsite.comにアクセスすると、すべての個人データにアクセスできなくなります。すべての「サブドメイン」にメインドメインと同じlocalStorageを共有させるにはどうすればよいですか?


4
FirefoxとIE8は、ユーザーが指定したドメインでの永続データの保存をサポートしています。たとえばFFでは、globalStorage ['site.com']を実行できます。これは、www.site.comおよびsite.comにアクセスできます。Chromeの実装でこれを行う方法はまだわかりません。
ジョジョ

9
いずれかを使用することを検討してください-wwwでアクセスするすべてのユーザーをリダイレクトします。サブドメインからサブドメインのないドメインへ、またはその逆。
Elad Nava

私はずっと前に記事を作成しました:Cross-Domain LocalStorage
jcubic

回答:


94

これは、ドメイン間で使用する方法です...

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

それが役に立てば幸いです:)


2
これは本当の答えであり、チェックされたものではありません。私はこれを自分で行いましたが、postMessageを使用して便利なコールバックラッパーも作成しました。
Jason Sebring

4
この方法を説明するいくつかのサンプルコードを含む優れた記事を次に示します。jcubic.wordpress.com
Todd Price

4
これは、サードパーティのCookieが無効になっていない場合にのみ可能であることに注意してください:stackoverflow.com/a/44097269/4311428
Max

6
Appleは、サードパーティのデータをブロックするために、デスクトップとモバイルの両方でSafari 7+のデフォルトを更新しました。オプションは「ブロックCookieおよびその他のWebサイトデータ」と呼ばれるようになりました。これは、ドメインによって完全に分離されたlocalstorageなどを指します。この方法はSafari
では機能しません

2
@Max @Aranganathanは、元の質問のケースでも引き続き機能します- site.com/ www.site.comサブドメインが同じ親ドメインにある限り
Kostiantyn

40

この特定の問題のためだけにiframeとpostMessageソリューションを使用している場合、データをサブドメインのないCookieに格納するだけで(コード的にも計算的にも)作業が少なくなると思います。ロード時のlocalStorageで、cookieから取得します

長所:

  • 追加のiframeとpostMessageを設定する必要はありません。

短所:

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

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


29
短所:4kの最大Cookieサイズ
Blake Miller、

17
また、難しい方法を学んだように、4kの制限は、単一のドメインのすべてのCookieのサイズの合計に対するものであり、各Cookieに対するものではありません。
Blake Miller、

他の短所: -クッキーは、より可能性の高い広告ブロック機能によってブロックされます-クッキーはサーバーがクッキーに格納するデータを使用していない場合は、サーバとクライアントbetrween小さなデータを共有するために使用されることを意図している、これは結果的に誤用である
Enno

32

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

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


このようなリダイレクトを行うためのサーバーへの管理者アクセス権がありません。そのライブラリでは、wwwとwww以外の永続的なデータを共有できますか?いくつかの読み取りを行った後、ほとんどすべてのブラウザーのストレージメカニズムが許可していないようです。cookieでもlocalStorageでも、この問題が発生します...
JoJo

はい、ストレージは通常、サブドメインを含むドメインに依存しています。これが私がリダイレクトを提案した理由です。必ずしも管理者アクセスは必要ありません。ドキュメントルートで.htaccessルールを使用するだけです
Eran Galperin

1
@JoJoそこヘッダを送信することにより、例えばをリダイレクトするには、いくつかの方法があるLocation、またはスルー<meta>HTMLタグ、または経由でさえJS window.location
ソニーサントス

1
これは答えを避けているだけです。マヤンクの答えを正解としてご覧ください。
Jason Sebring

1
+1 @avoiding、これは他のケースには関係ありません-私がここにいるような場合lang1.domain.com-lang2.domain.com
r --------- k

5

メインドメインでCookieに設定-

document.cookie = "key=value;domain=.mydomain.com"

次に、メインドメインまたはサブドメインからデータを取得し、localStorageに設定します


4

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

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


3
見たのですが、Safariでは動かないようです。github.com/ofirdagan/cross-domain-local-storage/issues/10
Andris Zalitis

1

この種のソリューションは、このような多くの問題を引き起こします。一貫性とSEOの考慮事項のために、メインドメインでのリダイレクトが最良のソリューションです。

サーバーレベルでリダイレクトする

Nginxでwwwをwww以外にリダイレクトする方法

https://www.digitalocean.com/community/tutorials/how-to-redirect-www-to-non-www-with-nginx-on-centos-7

または 使用している場合はルート53のような他のレベル


0

これは私が私のウェブサイトのためにそれを解決した方法です。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]

5
私はこれに反対票を投じたくなりますが、OPのユースケースに役立つため、私はそうしません。myapp.com、developers.myapp.com、およびsupport.myapp.comでセッションを維持したい場合は、この答えは良くない。
Don Omondi 2017年

ちょっと@DonOmondi私があなたが提案しているものへのリンクで私を助けてくれるとありがたいです!
Ayush Baheti 2017

3
OPは「サブドメイン間でlocalStorageを使用する」と尋ねましたが、答えは「wwwを非wwwにリダイレクトする」とはまったく異なりますが、特定のサブドメインが「www.abc.com」の場合にのみ機能します。より実用的。
Don Omondi 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.