ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptとCookieの問題を詳しく解説_JavaScriptスキル
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
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 をルート ドメイン名に書き込みます。大きな問題には注意を払わず、本末転倒です。
$.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);