ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptとCookieの問題を詳しく解説_JavaScriptスキル

JavaScriptとCookieの問題を詳しく解説_JavaScriptスキル

WBOY
WBOYオリジナル
2016-05-16 17:16:22885ブラウズ

js を使用して Cookie を読み書きするときの問題にまったく注意を払わなかったことが判明しました:
同じキー値で、異なるドメイン (locahost.dev.xxx.com、dev.xxx.com、xxx) .comなど)を同時に存在させることも可能ですが、document.cookieはこれらのCookieを全て読み出すことができますが、ドメイン情報が無いので、そのCookieのドメイン情報を読み出す方法も探してみました。残念ながら見つかりませんでした (わかりません) ドメイン情報を読み出す方法はありますか? もしあれば、教えてください)
この問題が発生するシナリオ:
最初に、ローカル (localhost.dev.xxx.com) を作成したかったのですが、dev (dev.xxx.com) 環境と uat (xxx.com) 環境の Cookie は相互に影響を与えません。cookieDomain

を生成しました。 location.hostnameに基づいて。

1 var cookieDomain = document.domain; 2 3 var tmp = location.hostname.split(.); 4 5 if(tmp.length > 2)6 7 cookieDomain = tmp.slice(1).join(. );
Cookie を書き込むとき、ドメインをこの cookieDomain に設定します。この方法では、異なる環境の Cookie は異なるドメインに書き込まれ、相互に影響を与えないようです。
ただし、この時点で、次のことができます。同じキーで N 個の Cookie の値を取り出します。そして、最初に出現した Cookie だけを取り出します。この問題では、顧客単位は犬のようなものです。皮膚の絆創膏。やめてください。外部に提供する URL は 1 つだけで、訪問者のコンピュータには値エラーが発生しないと N 回説明しましたが、毎回バグが発生します。やあ、この問題は必ずリストアップしましょう! すべての説明はピアノを弾くのと同じです
Mu Zhe、それでは、これらの人たちを救うために、js で書かれたすべての Cookie をルート ドメイン名に書き込みます。大きな問題には注意を払わず、本末転倒です。

コードをコピーしてください。 コードは次のとおりです:

(function(){

    // 清除旧版本的 cookie
    if(CTSZ.Cookie.get("cookieVersion") != Params.cookieVersion){
        var tmps = Params.orgDomain.split(.);
        var domain;
        var len = tmps.length;
        for(var i=0;i<= len - 3; i++){
tmps.shift();
domain = tmps.join(.);
CTSZ.Cookie.empty("/", domain);
}
CTSZ.Cookie.set("cookieVersion", Params.cookieVersion, Params.cookieExpires, "/", Params.cookieDomain);
}
})();

$.Cookie = {};
(function ($) {
$.getExpires = function (y, m, d, h, i, s, ms) {
var date = new Date();
y = isNaN(y) ? date.getFullYear() : y;
m = isNaN(m) ? date.getMonth() : m - 1;
d = isNaN(d) ? date.getDate() : d;
h = isNaN(h) ? date.getHours() : h;
i = isNaN(i) ? date.getMinutes() : i;
s = isNaN(s) ? date.getSeconds() : s;
ms = isNaN(ms) ? date.getMilliseconds() : ms;
return new Date(y, m, d, h, i, s, ms).toUTCString();
}
$.getExpiresByUTCString = function (UTCString) {
var s = new Date(UTCString).toUTCString();
if (s == NaN || s == Invalid Date)
return null; // IE,Opera NaN , FF,Safari Invalid Date;
else
return s;
}

$.set = function (k, v, expires, path, domain, secure) {
var cookie = k + = + encodeURIComponent(v);
if (expires) cookie += ";expires=" + expires;
if (path) cookie += ";path=" + path;
if (domain) cookie += ";domain=" + domain;
if (secure) cookie += ";secure";
document.cookie = cookie;
}

/*<以> In the past, all the cookies were taken out and put them in one object. When get, take it directly from that object. Now think about it, it is not correct. Because if the expiration time of a cookie has passed, that object has not been updated.
*/
$.get = function (k) {
var cks = document.cookie.split(;);
var t;
for (var i = 0; i < ; cks.length; i ) {
t = cks[i].split(=);
if (k == t[0].trim()) return t.length >= 2 ? decodeURIComponent (t[1]) : "";
        }
                                                                                                                         $.getExpires(new Date().getFullYear() - 1), path, domain);
}
(;);
var t;
for (var i = 0; i < cks.length; i ) {
$.remove(cks[i].split(=)[0]. trim(), path, domain);
                                                                                                                                                                       

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。