我正在使用以下代码来设置/删除cookie:
function get_cookie(cookie_name)
{
var results = document.cookie.match('(^|;) ?' + cookie_name + '=([^;]*)(;|$)');
if (results)
return ( decodeURI(results[2]) );
else
return null;
}
function set_cookie(name, value, exp_y, exp_m, exp_d, path, domain, secure)
{
var cookie_string = name + "=" + encodeURI(value);
if (exp_y)
{
var expires = new Date(exp_y, exp_m, exp_d);
cookie_string += "; expires=" + expires.toGMTString();
}
if (path)
cookie_string += "; path=" + encodeURI(path);
if (domain)
cookie_string += "; domain=" + encodeURI(domain);
if (secure)
cookie_string += "; secure";
document.cookie = cookie_string;
}
function delete_cookie(cookie_name)
{
var cookie_date = new Date(); // current date & time
cookie_date.setTime(cookie_date.getTime() - 1);
document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString();
}
但我得到的结果不一致。例如,在首页(www.example.com/start)上设置的Cookie不会始终显示在后续页面(www.example.com/foo/thing.jsp)上。我正在使用页面设置cookie“onUnload”
set_cookie("beginrequest", (new Date()).getTime(), null, null, null, "/");
并通过检索+删除它“onLoad”
loadDur = (new Date()).getTime() - get_cookie("beginrequest");
delete_cookie("beginrequest");
测量页面加载的总时间。
当使用firebug时,我经常会看到“剩余的”beginrequest-cookies和带有过去时间戳的beginrequest的多个实例。
我怎样才能在每个页面上看到一个beginrequest-cookie?
发布于 2018-09-28 09:06:19
如果您正在获取旧cookie,可能是因为您的页面包含大量内容,并且在onunload之前未调用onload(因为页面未完成加载)。因此,通过从onload和onunload调用类似的东西来删除cookie:
var deleted_cookie = false;
function delete_timestamp() {
if(!deleted_cookie) delete_cookie("beginrequest");
deleted_cookie = true;
}
如果您正在快速加载下一页以使'delete_cookie'cookie未正确过期,并且您的get_cookie实现正在捡起它,那么您可能也会遇到竞争条件。因此,尝试更改get_cookie中的正则表达式,只选择带有值的cookie:
var results = document.cookie.match('(^|;) ?' + cookie_name + '=([^;]+)(;|$)');
此外,如果您在多个窗口(或标签)中查看该网站,他们的cookie可能会混淆,所以不要这样做。但是尝试使用全局正则表达式来获取所有值,并且仅使用最新值。
发布于 2018-09-28 09:53:22
我同意amix的两个方面:乍一看你的代码看起来还不错,这可能会更好地处理服务器端的东西。
无论如何,我猜你现在遇到的问题很可能是事件没有以你认为的方式发射。有两种方法可以清除正在发生的事情,方法是在视觉上明显表明事件正在发生,并通过增加输出的详细程度。任何数量的东西可能会干扰实际触发的事件:插件,插件,按键等等,如果你打开一个新的窗口(或警报,或其他什么)当onload和onunload事件触发时,你将能够分辨确定正在调用函数。同样,如果您在cookie中存储更多数据,如原始URL等,您将能够更好地确定哪些页面正在生成额外的cookie。
我猜你的一个Firefox扩展会间歇性地干扰onunload事件。
https://stackoverflow.com/questions/-100000805
复制相似问题