很多人可能都知道新的欧盟隐私法,但对于那些没有的人来说,它基本上意味着没有一个由欧盟居民经营的网站可以设置被视为“非必要的运营除非获得明确许可,否则该网站将在访客计算机上使用。
那么,问题就变成了如何最好地解决这个问题?
浏览器显然能够阻止内置于其中的特定网站的cookie。我的问题是,有没有办法使用JS或PHP做类似的事情?
即。拦截可能试图设置的任何cookie(包括像Analytics或Facebook这样的第三方cookie),并阻止它们,除非用户已经同意。
显然可以在设置完成后删除所有cookie,但是虽然这相当于不允许首先设置它们,但我猜这在这种情况下不够好,因为它不遵守法律条文。
想法?
答案 0 :(得分:12)
我对这个答案也很感兴趣。我已经完成了我需要在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
}
}
然后我有一些额外的代码,当用户接受cookie时会关闭它。
问题是我的网站中使用了第三方插件,通过javascript操作cookie,而不是扫描它们以确定哪些访问document.cookie - 他们仍然可以设置cookie。
如果它们都使用相同的框架会很方便,所以我可以覆盖setCookie函数 - 但它们没有。
如果我可以删除或禁用document.cookie以便它变得无法访问,那就太好了......
编辑: 可以阻止javascript访问获取或设置cookie。
document.__defineGetter__("cookie", function() { return '';} );
document.__defineSetter__("cookie", function() {} );
编辑2: 为此在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() {} );
}
答案 1 :(得分:10)
我从这里改编了Michaels代码来提出这个问题。
基本上它使用defineGetter
和defineSetter
方法设置页面上的所有cookie然后删除用户指定的cookie,如果这是你的目标,这个角色当然也可以反转对
我已经使用第三方Cookie(例如Google Analytics)对此进行了测试,但它似乎运行良好(__utmb
Cookie除外意味着我不再在Google Analytics中使用),也许您可以使用它并对其进行调整满足您的特定需求。
虽然您可以轻松地从数组中获取这些值并以这种方式循环,但我已经包含了有关Cookie名称不是__utmb
的部分供您参考的内容。
基本上,此功能将包括除声明if( cookie_name.trim() != '__utmb' ) { all_cookies = all_cookies + cookies[i] + ";"; }
您可以使用OR或AND过滤器添加或者从数组,数据库,用户输入或任何您喜欢的内容中提取以排除特定的(用于确定基本和非必要cookie)。
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; } );
}
}
答案 2 :(得分:2)
您无法完全停用它,但可以使用.htaccess
尝试
SetEnv session.use_cookies='0';
如果某些用户可选,请不要使用.htaccess
if(!$isAuth)
{
ini_set('session.use_cookies', '0');
}
答案 3 :(得分:0)
有点老,但我认为您应该得到一个可行的答案:
第1步:不要执行第三方脚本代码。
第2步:显示Cookie标语。
第3步:等到用户接受后,您就可以执行第三方脚本代码了。
为我工作。
答案 4 :(得分:-2)
not paying attention to hoaxes怎么样?
除了这是旧闻新闻之外,文字清楚地表明它只适用于对网站功能不重要的。意味着会话cookie,购物篮或任何与使网站工作直接相关的内容都非常好。未经许可,“不允许”任何其他内容(跟踪,统计信息等)。