JavaScript cookie误解
我正在使用以下代码设置/获取删除cookie:JavaScript cookie误解,javascript,cookies,Javascript,Cookies,我正在使用以下代码设置/获取删除cookie: function get_cookie(cookie_name) { var results = document.cookie.match('(^|;) ?' + cookie_name + '=([^;]*)(;|$)'); if (results) return ( decodeURI(results[2]) ); else return null; } function set_
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();
}
但我得到的结果不一致。
例如,startpage(www.example.com/start)上设置的cookie并不总是显示在后续页面(www.example.com/foo/thing.jsp)上。
我正在使用设置页面的cookie“onUnload”
set_cookie("beginrequest", (new Date()).getTime(), null, null, null, "/");
并通过“onLoad”检索并删除它
测量页面加载所用的总时间
当使用firebug时,我经常看到“剩余的”beginrequest cookies和多个带有过去时间戳的beginrequest实例
如何实现在每页上只看到一个beginrequest cookie?您的set\u cookie、get\u cookie和delete\u cookie代码似乎是正确的。还有你的用法
我认为您应该将其转移到Java代码中—对我来说,这似乎比通过Cookie破解更容易。如果您使用的是旧Cookie,这可能是因为您的页面包含大量内容,并且onload在onload之前没有调用onload(因为页面未完成加载)。因此,通过从onload和onunload调用类似这样的函数来删除cookie:
var deleted_cookie = false;
function delete_timestamp() {
if(!deleted_cookie) delete_cookie("beginrequest");
deleted_cookie = true;
}
如果您加载下一页的速度足够快,以至于“delete\u cookie”cookie没有正确过期,并且您的get\u cookie实现正在接收该cookie,那么您可能还存在竞争条件。因此,请尝试更改get_cookie中的正则表达式,以仅拾取具有以下值的cookie:
var results = document.cookie.match('(^|;) ?' + cookie_name + '=([^;]+)(;|$)');
此外,如果您在多个窗口(或选项卡)中查看站点,他们的cookie可能会混淆,因此不要这样做。但是试着用一个全局正则表达式来提取所有的值,并且只使用最新的值。我在这两方面都同意amix的观点:您的代码乍一看是正常的,而服务器端的东西可能会更好地处理这一点 不管怎么说,我猜,你现在遇到的问题很可能是这些事件并没有像你想象的那样发生。有两种方法可以清除正在发生的事情,一种是使事件在视觉上明显地触发,另一种是增加输出的详细程度。任何事情都可能干扰实际触发的事件:插件、插件、按键等等。如果在onload和onunload事件触发时打开一个新窗口(或警报,或其他),您将能够确定函数正在被调用。同样,如果您在cookie中存储更多数据,如原始URL等,您将能够更好地确定哪些页面正在生成额外的cookie
我猜您的Firefox扩展中有一个正在间歇性地干扰onunload事件。响应了另一个的建议,在服务器端做一些工作-我过去做过这样的工作: 1) 在服务器端捕获请求的时间,并在页面中包含带有时间变量的脚本标记:
<script type="text/javascript"> var start = 1224068624230;</script>
var启动=1224068624230;
2) 在页面末尾,使用JavaScript获取新时间并计算总时间
<script type="text/javascript"> var start = 1224068624230;</script>