JavaScriptのサブドメインへのクッキーの設定
13063 ワード
サブドメインへのクッキーの設定は非常にトリッキーです.
最近FOOからクッキーを設定するという問題に直面しました.Mycompanyすべてのサブドメイン
そして、問題が来ました:リストTop-Level Domains .
トップレベルドメインとクッキー
次の2つのドメインを考えましょう. FOOバー.コム FOO株式会社 JavaScriptを使用すると、すべてのクッキーを利用できるように設定することができます
しかし、すべてのクッキーを設定することはできません
Webブラウザは、与えられた文字列がトップレベルドメインかどうかチェックする方法を提供しません.そのような特徴が存在するならば、私がクッキーをセットすることができるかどうか決定するのを助けます
リスト内のTLDSのリスト
解決策の一つは、あなたのアプリケーション内のすべてのトップレベルドメインのリストを格納し、このリストに対してドメインをチェックすることです.Mozilla FoundationはプロジェクトをホストしますPublic Suffix List これは1つの場所にすべてのTLD名を格納します.
しかし、実際には、リスト内のリストを維持するだけで痛みの痛みです.
"try and check "メソッド(推奨)
しかし、より簡単な解決策があります:単にクッキーをドメインにセットして、ブラウザーが実際にそのクッキーをセットするかどうかチェックしてください.そうでなければ、トップレベルドメインであり、サブドメインにクッキーを設定する必要があります.
ここでは、クッキーとコードをTLDの問題に設定するコードの例を示します.それは、1からの有名なコード断片の修正ですarticle about cookies "quirksmode ":
しかし、我々がいるとき
このコードは、さまざまなドメインの何千もの私の生産環境でうまく動作します.それはトップレベルドメインのリストを格納し、リスト上のものに現在のドメインを比較するよりも簡単です.
最近FOOからクッキーを設定するという問題に直面しました.Mycompanyすべてのサブドメイン
*.mycompany.com
ドメイン.解決策はかなり簡単だった:ちょうどワイルドカードクッキーを設定する.mycompany.com
(最初の文字はドットです).しかし、ターゲットドメイン(実際の値)を決定しなければなりませんでした.mycompany.com
”) 私のコードが何万もの異なるドメインで解雇されるので、自動的に.そして、問題が来ました:リストTop-Level Domains .
トップレベルドメインとクッキー
次の2つのドメインを考えましょう.
bar.com
内部からのサブドメインfoo.bar.com
サブドメイン.しかし、すべてのクッキーを設定することはできません
co.uk
内部からのサブドメインfoo.co.ok
サブドメインco.uk
はトップレベルドメインです.それが可能であるならば、あなたのブラウザーはそのクッキーを英国で利用できるすべてのウェブサイトに送りますco.uk
) ドメイン.Webブラウザは、与えられた文字列がトップレベルドメインかどうかチェックする方法を提供しません.そのような特徴が存在するならば、私がクッキーをセットすることができるかどうか決定するのを助けます
.co.uk
私にはできません..bar.com
(これはできます).リスト内のTLDSのリスト
解決策の一つは、あなたのアプリケーション内のすべてのトップレベルドメインのリストを格納し、このリストに対してドメインをチェックすることです.Mozilla FoundationはプロジェクトをホストしますPublic Suffix List これは1つの場所にすべてのTLD名を格納します.
しかし、実際には、リスト内のリストを維持するだけで痛みの痛みです.
"try and check "メソッド(推奨)
しかし、より簡単な解決策があります:単にクッキーをドメインにセットして、ブラウザーが実際にそのクッキーをセットするかどうかチェックしてください.そうでなければ、トップレベルドメインであり、サブドメインにクッキーを設定する必要があります.
ここでは、クッキーとコードをTLDの問題に設定するコードの例を示します.それは、1からの有名なコード断片の修正ですarticle about cookies "quirksmode ":
var Cookie =
{
set: function(name, value, days)
{
var domain, domainParts, date, expires, host;
if (days)
{
date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
expires = "; expires="+date.toGMTString();
}
else
{
expires = "";
}
host = location.host;
if (host.split('.').length === 1)
{
// no "." in a domain - it's localhost or something similar
document.cookie = name+"="+value+expires+"; path=/";
}
else
{
// Remember the cookie on all subdomains.
//
// Start with trying to set cookie to the top domain.
// (example: if user is on foo.com, try to set
// cookie to domain ".com")
//
// If the cookie will not be set, it means ".com"
// is a top level domain and we need to
// set the cookie to ".foo.com"
domainParts = host.split('.');
domainParts.shift();
domain = '.'+domainParts.join('.');
document.cookie = name+"="+value+expires+"; path=/; domain="+domain;
// check if cookie was successfuly set to the given domain
// (otherwise it was a Top-Level Domain)
if (Cookie.get(name) == null || Cookie.get(name) != value)
{
// append "." to current domain
domain = '.'+host;
document.cookie = name+"="+value+expires+"; path=/; domain="+domain;
}
}
},
get: function(name)
{
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i=0; i < ca.length; i++)
{
var c = ca[i];
while (c.charAt(0)==' ')
{
c = c.substring(1,c.length);
}
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
},
erase: function(name)
{
Cookie.set(name, '', -1);
}
};
以下に使用方法を示します.Cookie.set('test', '123');
我々がいるときfoo.bar.com
ドメインは、クッキーが利用可能になります*.bar.com
サブドメイン.しかし、我々がいるとき
foo.co.uk
ドメインは、クッキーが利用可能になります*.foo.co.uk
サブドメイン.このコードは、さまざまなドメインの何千もの私の生産環境でうまく動作します.それはトップレベルドメインのリストを格納し、リスト上のものに現在のドメインを比較するよりも簡単です.
Reference
この問題について(JavaScriptのサブドメインへのクッキーの設定), 我々は、より多くの情報をここで見つけました https://dev.to/livechat/setting-cookies-to-subdomains-in-javascript-1md9テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol