立即更新 cookie_cache: 可以在设置 cookie 的时候立刻更新 document.cookie,而不仅是缓存到 cookie_cache 中。你可以通过直接调用 document.cookie = cookie_cache 来确保页面上能够读取到最新的 cookie 值。
使用 Set-Cookie 头:如果服务端是通过 Set-Cookie 头来返回新 cookie,那么你可以在 hook 中直接模拟该头的效果,将新的 cookie 添加到 cookie_cache。
确保 cookie 的同步:可以在 set 中调用原生的 document.cookie 方法来保证 cookie 是在页面中的最新值。你的代码中仅在 console.log 后缓存到 cookie_cache,可能需要再调用一次 document.cookie = cookie_cache。
增加对 Cookie 的直接读取:在 get 方法中可以尝试获取当前 document.cookie 值,并与 cookie_cache 合并,以确保读取到的 cookie 是最新的。
基于你的代码,我做出以下修改:
[JavaScript] 纯文本查看 复制代码
(function () {
var cookie_cache = document.cookie;
Object.defineProperty(document, 'cookie', {
set: function (val) {
if (val.indexOf('jsl') != -1) {
debugger;
}
console.log("hook cookie =>", val)
var cookie = val.split(";")[0];
var ncookie = cookie.split("=");
var flag = false;
var cache = cookie_cache.split("; ");
cache = cache.map(function (a) {
if (a.split("=")[0] === ncookie[0]) {
flag = true;
return cookie;
}
return a;
});
if (!flag) {
cache.push(cookie);
}
cookie_cache = cache.join("; ");
// 将cookie_cache立即同步到document.cookie
document.__defineSetter__('cookie', function() {
return cookie_cache;
});
return cookie_cache;
},
get: function () {
return cookie_cache;
},
});
})(); |