1

Firefox 부가 기능을 개발하려고합니다. HTTP로 표시된 쿠키 만 계산하고 싶습니다. 수동으로 확인하면 많은 웹 사이트에 하나 이상의 HTTP 전용 쿠키가있는 것을 보았습니다. 하지만 내 결과는 항상 0 또는 1입니다. 내 잘못은 어디 있니? 내Mozilla 애드온으로 HTTP 전용 쿠키 수를 계산하십시오.

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); 
}); 

답변

1

당신의 function getCookies(host)이 지정된 host에 대한 모든 쿠키를 통해 루프로 구성되는 while 루프를 가지고 :

여기 내 코드입니다. 그러나 해당 루프의 내부 부분은 한 번만 실행됩니다. 그 루프 내에서

는 당신이 if 문이 : 함수에

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

이 문 결과를 즉시 반환을 중 하나 1 또는 발견 된 첫 번째 쿠키 true 또는 false과 재산 cookie.isHttpOnly이있는 경우에 따라 0. [cookie은이 if 문을 처음 실행했을 때 항상 0입니다.] 즉시 값이 return이므로 다른 쿠키는 첫 번째 이외의 다른 쿠키는 확인되지 않습니다. 함수 실행은이 if 문 내의 두 return 문 중 하나에서 끝납니다. if 뒤에있는 함수 내의 행은 실행되지 않습니다. 당신은 당신이 원하는 무엇을 설명에서

, 당신의 if 문으로 더 나은 것 :

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

참고 : 만 별도의 변수에 할당 할 필요가 없습니다, 한 번 cookie.isHttpOnly를 사용하는 것이 감안할.

+0

매우 고맙습니다. 도움과 설명이 완벽했습니다. 시간 내 주셔서 감사합니다!! :) – gregSTam