web-dev-qa-db-ja.com

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

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

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

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

誰かが私のドメインでクッキーをサブドメイン間で読み取れるようにするのを手伝ってくれるでしょうか?

<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>
92
Evan

Cookieのdomainおよびpath属性を次のように設定するだけです。

<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>
189
aroth

あなたが欲しい:

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

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

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

26
Mike Lewis

これが実際の例です:

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

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

4
caseyjustus

MDN JavaScript Cookie Framework を使用して、以下を実行することもできます。

docCookies.setItem('HelloWorld', 'HelloWorld', myDate, '/', 'example.com');
1
rebagliatte