【问题标题】:Count HTTP only cookies with Mozilla add-on使用 Mozilla 插件计算仅 HTTP cookie
【发布时间】:2016-07-27 17:44:40
【问题描述】:

我正在尝试开发一个 Firefox 插件。我想只计算标记为 HTTP 的 cookie。手动检查时,我发现许多网站都有不止一个 HTTP 专用 cookie。但是,我的结果总是01。我的错在哪里?

这是我的代码:

var {Cc, Ci, Cu} = require("chrome");
Cu.import("resource://gre/modules/Services.jsm");
var cookieManager = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2);
var tabs = require("sdk/tabs");

tabs.on('load', function(tab) { 
    var URL = tab.url;
    var url = require("sdk/url").URL(URL);
    var host = url.host;

    function getCookies(host){
        var cookies = cookieManager.getCookiesFromHost(host);
        var count = 0;
        while (cookies.hasMoreElements()){
            var cookie = cookies.getNext().QueryInterface(Ci.nsICookie2);
            //var count = 0;
            var httpCookie = cookie.isHttpOnly;
            if(httpCookie){
                return count=count+1 ;
            }else{
                return 0;
            }
            console.log("Cookie host: " + cookie.host + "; Cookie Name :" +  cookie.name 
                        + " = Cookie value:" + cookie.value + "\n");
            dump("\tCookie host: " + cookie.host + " Is Domain cookie: " +cookie.isDomain 
                 + "; Cookie Name :" + cookie.name +" = Cookie value:" + cookie.value 
                 + "; Is Session Cookie  :" + cookie.isSession 
                 + "; Expiry time  :" + cookie.expiry 
                 + "; It is an Http only cookie :" + cookie.isHttpOnly  +  "\n");
        }
        return count;
    }
    var getResult = getCookies(host);
    console.log("Http Cookies: " + getResult);
});

【问题讨论】:

    标签: javascript cookies firefox-addon firefox-addon-sdk mozilla


    【解决方案1】:

    在您的function getCookies(host) 中,您有一个while 循环,旨在循环遍历指定host 的所有cookie。但是,该循环的内部部分只执行一次。

    在该循环中,您有一个 if 语句:

    var httpCookie = cookie.isHttpOnly;
    if(httpCookie){
        return count=count+1 ;
    }else{
        return 0;
    }
    

    此语句导致函数立即返回 10,具体取决于找到的第一个 cookie 是否具有属性 cookie.isHttpOnlytruefalse。 [注意:cookie 在第一次也是唯一一次执行此 if 语句时始终为 0。] 除了第一个 cookie 之外,不会检查其他 cookie,因为您立即 return 值。函数的执行在此 if 语句中的两个 return 语句中的任何一个处结束。 if之后的函数内的行将不会被执行。

    根据你所描述的你想要的,你的if 声明会更好:

    if(cookie.isHttpOnly){
        count++;
    }
    

    注意:鉴于您只使用了一次cookie.isHttpOnly,因此无需将其分配给单独的变量。

    【讨论】:

    • 非常感谢,您的帮助和解释非常完美。感谢您的时间!! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    相关资源
    最近更新 更多