使用Mozilla插件计算仅HTTP cookie

Count HTTP only cookies with Mozilla add-on

本文关键字:HTTP cookie 计算 Mozilla 插件 使用      更新时间:2023-09-26

我正在尝试开发一个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);
});

在您的function getCookies(host)中,您有一个while循环,用于循环通过指定host的所有cookie。但是,该循环的内部只执行一次。

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

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

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

根据你的描述,你的if声明最好是:

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

注意:假设您只使用cookie.isHttpOnly一次,则无需将其分配给单独的变量。