Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript cookie误解_Javascript_Cookies - Fatal编程技术网

JavaScript 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_

我正在使用以下代码设置/获取删除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();
}
但我得到的结果不一致。 例如,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>