STOF DOOS

へっぽこエンジニアのちまちま奮闘記

【DAY007】javascriptでURLドメインを指定してcookieの操作がどこまでできるのか

はじめに

そもそも、cookieドメイン指定や操作はしない方が良い。 理由については下の記事でよくわかる。

blog.tokumaru.org

けれども、時と場合によっては必要なこともある。

以前業務で調べたことを、覚書として残しておく。

追々調べなおして修正する予定。

前提

  • cookieのpath指定はすべて「/」である。
    • pathも変わるとさらにcookieの制約範囲が狭まるため。
  • javascriptcookieを与える

cookieの読み書き範囲の調査

1. トップドメイン(.com, .jp等)で指定してcookie付与は不可

document.cookie = "_testTop=hogehoge; path=/; domain=.com;";

=> 付与できない

2. ドメインで指定してcookieを付与した場合、指定した階層以下からは参照可能

参照可否の図

| 同一 | 上位 | 下位 |

| 〇 | ×  | 〇 |

現在の場所 test.aaa.domain.com

document.cookie = "_test=ttttt; path=/; domain=.aaa.domain.com;";

参照可能範囲

  • test.aaa.domain.com
  • tttt.aaa.domain.com
  • aaa.domain.com
参照不可
  • domain.com

現在いる場所のドメインと指定するドメインの場所が異なる場合、書き込み不可

現在の場所 test.aaa.domain.com

document.cookie = "_testAno=anotherdomain; path=/; domain=.tttt.aaa.domain.com;";

ドメインを指定せずにcookieを書き込むと、そのドメインからしか見ることができない

現在の場所 aaa.domain.com

document.cookie = "_testNoSetDomain=foobaa; path=/;";
IEの場合】、ルートドメインcookieが発行されるとサブドメインまで読み込むことができる。

① root.com/hogehoge.htmlで以下のように設定

document.cookie = "_sun_tes_no_set_domain=noDomain; path=/";
document.cookie = "_sun_tes_no_priod=setNoDomain; domain=root.com; path=/";
document.cookie = "_sun_tes_set=setDomain; domain=.root.com; path=/";

② sub.root.com/fugafuga.htmlでcookieを確認すると、すべての値を確認可能。

参考