-1

我用 javascript 编写了一个脚本来删除当前域中的所有 cookie(除了一些包含在白名单中的 cookie)(使用document.cookie)。我如何确保它正常工作并确实删除了 cookie?

我通过将它包含在一个 html 文件中然后打开该文件在浏览器中运行它,但我不明白如何测试它是否会删除域中的 cookie,因为当我打开一个 html 文件时它与域无关.

这是我的代码:

//cookies we need
  const whitelist = [
  'example_cookie', 
  ]; 


function removeUnnecessaryCookies() {
  let decodedCookie = decodeURIComponent(document.cookie);   //check for special characters 
  let allCookies = decodedCookie.split(';'); //make array of all cookies in domain 

  for (var i = 0; i < allCookies.length; i++) {
    let cookie = allCookies[i];
    if (!whitelist.includes(cookie)) {
      deleteCookie(cookie); 
    }
  }
}

/* helper function to delete cookies */
function setCookie(cookieName, cookieValue, cookieExpiry) {
  let date = new Date();
  date.setTime(date.getTime() + (cookieExpiry*24*60*60*1000));
  let expires = "expires=" + date.toUTCString();
  document.cookie = cookieName + "=" + cookieValue + ";" + expires + ";path=/";
}

function deleteCookie(cookieName) {
  setCookie(cookieName, '', -100);
}

removeUnnecessaryCookies();
4

2 回答 2

0

编写一个 getCookie 方法并对其进行测试。这是一个例子:

function setCookie(name, value, days) {
    var expiry = new Date()
    expiry.setTime(expiry.getTime() + (days * 24 * 60 * 60 * 1000))
    var expires = 'expires=' + expiry.toUTCString()
    document.cookie = name + '=' + value + ';' + expires + ';' + 'path=/'
}

function getCookie(name) {
    var name = name + '='
    var decodedCookie = decodeURIComponent(document.cookie)
    var ca = decodedCookie.split(';')

    for(var i = 0; i < ca.length; i++) {
        var c = ca[i]

        while (c.charAt(0) == ' ') {
            c = c.substring(1)
        }

        if (c.indexOf(name) == 0) return c.substring(name.length, c.length)
    }

    return false
}


// set cookie
setCookie('mycookie', '1', 365);

// get cookie
getCookie('mycookie');
getCookie('joe'); // returns false
于 2018-06-13T21:10:40.150 回答
0

你最好的选择是启动一个本地主机网络服务器(像 WAMP 或 MAMP 或 Mac 应该可以解决问题)并删除一个 cookie。在浏览器中查看域并复制它。

于 2018-06-13T21:12:02.637 回答