[jQuery]マルチドメインでcookieを共有する方法と活用例

使用機会ほぼ無いよこれ

営業掛ける系なら分からんでもないギミック

cookieは情報をブラウザに残す系のアレで、ログイン情報だとかその辺を有効期限内は有効にする的なやつとかで使ったりする。タブなりブラウザを閉じてもcookieが生きてたらログインの手間をすっ飛ばしてくれる。身近なものだとそういうやつ。

cookieはkeyとvalueのセットでいくらでも登録できるんで活用方法は色々ある。

「WEBサイトにアクセスしたら」「特定ページにアクセスしたら」「特定の動作(クリックなど)をしたら」で条件をつくって、valueもバリエーションをもたせられるので、条件分岐から色々と出力できる。

なので、初回アクセス時のポップアップの発火条件として仕込んだりもする(方法を知らないのか仕込めないのかわざとなのか、毎度表示する強気なところもある)。

クロスドメインで共有する必要性

使い所はあんまりない。でも、無くもない。

複数のWEBサイトをまたいだらまたPRのポップアップが出るとか、ログインを要求するとか、自社サービス内であればユーザーに優しくないのでネガティブな印象を与える原因になっちゃったりする。だったらグループ内でcookieを共有したらいいじゃない?ということになる。

クロスドメインというか同ドメインのサブドメインならやれる

まず、cookieの使用を理解する。keyとvalueだけでなく、有効期間とかその辺の設定ができる。

説明してる記事は色々あるので検索して確認して下さい。

で、「Domain」にドメインを指定しておけば、そのドメインで作ったサブドメインも対象にできるというやつを活用すればWEBサイトをまたいでCookieを使い回せるよ、ということ。

今回の話はそれ。

やっていく

ドメインの手前に何かが付いてたらサブドメイン。

  • aaa.example.jp
  • www.example.jp
  • test.example.jp

これら全部が同ドメインによるサブドメイン。「example.jp」を指定すればこれら全てで使えるということになる。簡単。

jsでのcookieの取得やら設定はライブラリを使うのが楽。今回は「jquery.cookie.min.js」を使ってみる。jQuery3でも動く。

必要なものを読み込む。

<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
<script src="js/scripts.js"></script> <!-- cookieの設定はこれに書くとする -->

取得とか設定とかはこんな感じ。

$(function () {
    var cookieKey = '【任意のkey】';
    var cookieVal = '【任意のvalue】';
    var checkVal = $.cookie(cookieKey);
    if(checkVal == cookieVal){
        /* cookieがあったら */
    }else{
        /* cookieが無かったら */
    }
    $("a.addCookie").on("click", function () {
        /* cookieの設定 */
        $.cookie(cookieKey,cookieVal,{expires:1, path:'/', domain:'example.jp'});
    })
});

cookieの設定タイミングは好きにできるわけで、上書きも可能なわけで、だからどうにでもできる。

作ったものを各サブドメインに貼ればいい。挙動が同じならただのコピペで済むので、個別のチューニングもいらない。楽。

番外:phpでやる方法

「setcookie()」で仕込めるし、$_COOKIE[“***”]で拾える。

以前書いてた。

phpになってもcookie自体は同じなので、だからやれることも一緒。

クッキー(cookie)に値を保存する [setcookie] - Project Group
クッキー(cookie)に値を保存する

セキュリティの話

特定の値で判別させるギミックはセキュリティ的にとんでもなくよろしくない脆さがある。なので、マジでログイン情報を引っ張る場合は何かしらの関数をかけて暗号化するとかでやっていかないと超危険。

本職ならそこらへんも好きに扱えばいいと思うけど、そうじゃない人だったら、アクセスしたよとかクリックしたよの判定を活用する程度に抑えるべきだと思います。

応用というか

よそのドメインを指定すれば他のドメインでもいけるんじゃんね?という考えもある。

その代わり、それ用にcookieを作らなきゃだから設定の手間が1つ増えますねという。

コメント

タイトルとURLをコピーしました