ドメインでJavaScript Cookieを作成し、サブドメイン間で読み取る


101

以下は、ユーザーのコンピューターに12か月間書き込まれるJavaScript Cookieです。

などのメインドメインにCookieを設定した後example.com、ユーザーがなどのサブドメインにアクセスしたtest.example.com場合、「テスト」サブドメイン全体でのユーザーのアクティビティを引き続き特定する必要があります。

ただし、現在のコードでは、を離れwww.example.comてにアクセスするとすぐにtest.example.com、「HelloWorld」のフラグが付けられなくなります。

誰かが私のコードを手伝って、サブドメイン間でCookieを読み取れるようにすることはできますか?

<script type="text/javascript">
  var cookieName = 'HelloWorld';
  var cookieValue = 'HelloWorld';
  var myDate = new Date();
  myDate.setMonth(myDate.getMonth() + 12);
  document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate;
</script>

回答:


209

次のように、Cookieに属性domainpath属性を設定するだけです。

<script type="text/javascript">
var cookieName = 'HelloWorld';
var cookieValue = 'HelloWorld';
var myDate = new Date();
myDate.setMonth(myDate.getMonth() + 12);
document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate 
                  + ";domain=.example.com;path=/";
</script>

2
localhostでこれを実行しようとしていますが、パスを変更できません
Enve

7
@Enve-ブラウザはlocalhost Cookieを他のCookieと少し異なる方法で処理します。むしろ、ローカルホストでの作業を困難にする方法ですべてのCookieを扱います。たとえば、stackoverflow.com / questions / 1134290 /…を参照してください。私はあなたの編集を提案するhostsファイルをとのようなものエイリアシングmyserver.localにします127.0.0.1。次に、それを使用してローカルサーバーにアクセスし(Cookieを設定するときに)、うまくいけばすべてが機能するはずです。
2013年

3
作成および取得するすべてのCookie値は文字列値である必要があります。文字列には、ローカルストレージを取得しようとするときにローカルストレージを混乱させる可能性のある文字を含めることができます。私が提案する1つのことは、Cookieの名前と値にグローバルなencodeURI()decodeURI()メソッドを使用して、実行する必要のある変換を処理することです。すなわちdocument.cookie = encodeURI(cookieName) +"=" + encodeURI(cookieValue)
Dzeimsas Zvirblis 2013

2
サーバー側のコードがC#で記述されている場合、Rick Strahlは、weblog.west-wind.com
posts /

残念ながら、JavaScript sub.example.com.example.com使用するためにCookieを設定することはできません
Marinos An

27

あなたが欲しい:

document.cookie = cookieName +"=" + cookieValue + ";domain=.example.com;path=/;expires=" + myDate;

RFC 2109に従って、すべてのサブドメインでCookieを使用できるようにする.には、ドメインの前にを置く必要があります。

path = /を設定すると、指定したドメイン全体(別名.example.com)内でCookieを使用できるようになります。


FWIW-「path = expires =」を削除して「expires =」に設定する必要があると思います。
マロンソ

3
新しいRFC 6265に従って、.ドメインの前にを含める必要はなくなりました。
Dan

6

これが実際の例です:

document.cookie = "testCookie=cookieval; domain=." + 
location.hostname.split('.').reverse()[1] + "." + 
location.hostname.split('.').reverse()[0] + "; path=/"

これは、ロケーションオブジェクトからルートドメインを取得してCookieを設定する一般的なソリューションです。逆になっているのは、サブドメインがいくつあるかわからないためです。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.