JavaScript にちょっとした工夫をすると、サブドメインの異なる2つのサイト(例えば www1.mydomain.com と www2.mydomain.com)でクッキーを共有することができる、らしい!
例えばこんな感じです。まずは http://www1.mydomain.com/setCookie.html でクッキーをセットします:
次に http://www2.mydomain.com/getCookie.html で http://www1.mydomain.com/setCookie.html でセットしたクッキーを取り出します。サブドメインの異なる2つのサーバー間で同じクッキーをやりとりしている点に注目:
上記のように、クッキーを設定する際(getCookie.html)のドメイン指定時に、頭に "." を付けたドメイン("mydomain.com" ではなく ".mydomain.com")を指定して保存します。これがカギのようです。
これで、www1.mydomain.com でクッキーを設定した後に www2.mydomain.com でそのクッキーを取り出して使う、という処理が実現できます。異なるアプリケーションサーバーで同じ情報を覚えさせて使う場合に便利な方法ですよね。
なお、上の例ではユーザー名とパスワードをクッキーに保存して取り出す、というサンプルを紹介していますが、実際のアプリではパスワードをクッキーに入れるのは危険なので、あまりオススメしません(苦笑)。
例えばこんな感じです。まずは http://www1.mydomain.com/setCookie.html でクッキーをセットします:
(setCookie.html) <html> <head> <script type="text/javascript"> function setMyCookie(username, password) { var s=setMyCookieWithDomain("username",username); document.cookie = s; var t=setMyCookieWithDomain("password",password); document.cookie = t; alert(s+"\n"+t); // 保存内容を確認表示 } function setMyCookieWithDomain(key,val){ var str = escape(key) + "=" + escape(val); str += "; domain=.mydomain.com"; // 頭に "." を付けたドメイン名を指定(ここがカギ!) return str; } </script> </head> <body> <input type="button" value="test1-set" onclick="setMyCookie('username1','password1')"> <input type="button" value="test2-set" onclick="setMyCookie('username2','password2')"> </body> </html>
次に http://www2.mydomain.com/getCookie.html で http://www1.mydomain.com/setCookie.html でセットしたクッキーを取り出します。サブドメインの異なる2つのサーバー間で同じクッキーをやりとりしている点に注目:
(getCookie.html) <html> <head> <script type="text/javascript"> function getMyCookieWithDomain() { var s="";var t=""; cookies = document.cookie.split("; "); // www1 でセットしたクッキーを www2 で取り出している for (i = 0; i < cookies.length; i++) { str = cookies[i].split("="); if (unescape(str[0]) == "username") s="id = "+unescape(str[1]); else if (unescape(str[0]) == "password") t="pass= "+unescape(str[1]); } return s+"\n"+t; } </script> </head> <body> <input type="button" value="TEST" onclick="alert(getMyCookieWithDomain())"> </body>
上記のように、クッキーを設定する際(getCookie.html)のドメイン指定時に、頭に "." を付けたドメイン("mydomain.com" ではなく ".mydomain.com")を指定して保存します。これがカギのようです。
これで、www1.mydomain.com でクッキーを設定した後に www2.mydomain.com でそのクッキーを取り出して使う、という処理が実現できます。異なるアプリケーションサーバーで同じ情報を覚えさせて使う場合に便利な方法ですよね。
なお、上の例ではユーザー名とパスワードをクッキーに保存して取り出す、というサンプルを紹介していますが、実際のアプリではパスワードをクッキーに入れるのは危険なので、あまりオススメしません(苦笑)。
コメント