可以使用JavaScript或PHP阻止cookie设置?

问题描述 投票:0回答:2
browsers显然可以将cookie从内置的特定网站上阻止。 我的问题是,有没有一种方法可以使用JS或PHP进行类似的操作?

I.E。拦截所有可能试图设置的cookie(包括分析(例如分析)或Facebook等第三方cookie),并将其阻止,除非用户已获得同意。 显然,一旦设置了所有饼干,这显然可以删除所有cookie,但是尽管这相当于不允许它们首先设置为同一件事,但我猜想在这种情况下它不够好,因为它不是'遵守法律的信。

Ideas?

我对这个答案也很感兴趣。 我已经完成了我需要在PHP中完成的工作,但是JavaScript组件仍然使我感到不安。

我在php中做到这一点:

$dirty = false; foreach(headers_list() as $header) { if($dirty) continue; // I already know it needs to be cleaned if(preg_match('/Set-Cookie/',$header)) $dirty = true; } if($dirty) { $phpversion = explode('.',phpversion()); if($phpversion[1] >= 3) { header_remove('Set-Cookie'); // php 5.3 } else { header('Set-Cookie:'); // php 5.2 } }

然后,我还有一些其他代码,当用户接受cookies时,它会关闭它。

问题是,在我的网站中使用了第三方插件,可以通过JavaScript操纵Cookie,并且缺少通过它们扫描以确定哪些访问文档。 如果他们都使用相同的框架,那将很方便,因此我可能能够覆盖setCookie功能 - 但它们却没有。 如果我只能删除或禁用文档,那就太好了。

Edit: 可以防止JavaScript访问获得或设置cookie。
php javascript cookies blocking
2个回答
18
投票

Edit2: 为此可以在IE中工作:

if(!document.__defineGetter__) { Object.defineProperty(document, 'cookie', { get: function(){return ''}, set: function(){return true}, }); } else { document.__defineGetter__("cookie", function() { return '';} ); document.__defineSetter__("cookie", function() {} ); }


我从这里改编了Michaels代码来提出此内容。

基本上,它使用

defineGetter

defineSetter

方法来设置页面上的所有cookie,然后删除指定的cookie,如果这是您的目标,当然也可以逆转此角色。 我已经用Google Analytics(分析)等第三方饼干对此进行了测试,并且它似乎运行良好(不包括cookie意味着我不再在Google Analytics(分析)中获取),也许您可以使用它并适应您的特定需求.

我已经包括了有关是否不是cookies名称的部分供您参考,尽管您可以轻松地从数组中获取这些值并通过这些方式循环循环。

基本上,此功能将包含所有cookie,除了指定部分的cookie

__utmb

您可以使用或或过滤器将其添加到此数字,数据库,用户输入或任何您喜欢排除特定的内容(用于确定必需cookie和非必需的cookie之间)。

__utmb

11
投票

有点老,但我认为您应该得到一个有效的答案:
步长1:不要执行第三方脚本代码。

步长2:显示cookie横幅。

步骤3:等到用户接受,现在您可以执行第三方脚本代码。

为我工作
    

您无法完全禁用它,但是您可以用

if( cookie_name.trim() != '__utmb' ) { all_cookies = all_cookies + cookies[i] + ";"; }

覆盖默认设置

try

function deleteSpecificCookies() {
  var cookies = document.cookie.split(";");
  var all_cookies = "";

  for (var i = 0; i < cookies.length; i++) {
    var cookie_name = cookies[i].split("=")[0];
    var cookie_value = cookies[i].split("=")[1];

    if (cookie_name.trim() != "__utmb") {
      all_cookies = all_cookies + cookies[i] + ";";
    }
  }

  if (!document.__defineGetter__) {
    Object.defineProperty(document, "cookie", {
      get: function () {
        return all_cookies;
      },
      set: function () {
        return true;
      },
    });
  } else {
    document.__defineGetter__("cookie", function () {
      return all_cookies;
    });
    document.__defineSetter__("cookie", function () {
      return true;
    });
  }
}

如果某些用户不使用

.htaccess

SetEnv session.use_cookies='0';

如何不关注骗局?
? 从这是旧新闻的事实来看,文本清楚地表明,它仅适用于对网站函数不必要的cookie。意思是会话cookie,购物篮或与使网站工作直接相关的任何内容都很好。未经许可,其他任何(跟踪,统计等)被“不允许”。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.