多くの方はおそらく新しいEUプライバシー法を知っているでしょうが、知らない人にとっては、基本的に、EUに居住する会社が運営するサイトが「ウェブサイトの運営に不可欠ではない」と分類されるCookieを設定できないことを意味します明示的な許可がない限り、訪問者のマシン上で。
だから、問題はこれに最もよく対処する方法になりますか?
ブラウザには、組み込みの特定のWebサイトからのCookieをブロックする機能があることは明らかです。私の質問は、JSまたはPHPを使用して同様のことを行う方法はありますか?
つまり、設定しようとしている可能性のあるCookie(AnalyticsやFacebookなどのサードパーティのCookieを含む)を傍受し、ユーザーが同意しない限りそれらをブロックします。
一度設定すればすべてのCookieを削除することはもちろん可能ですが、そもそも設定を許可しないのと同じことですが、この場合は設定が不十分なので十分ではないと思います。法律の文言を遵守してください。
アイデア?
私もこの答えにかなり興味があります。 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を削除または無効にして、アクセスできなくなったらいいのにと思います...
編集:Cookieを取得または設定するためのJavaScriptアクセスを防ぐことができます。
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() {} );
}
これを思い付くために、ここからMichaelsコードを適合させました。
基本的には、defineGetter
メソッドとdefineSetter
メソッドを使用して、ページ上のすべてのCookieを設定してから、ユーザーが指定したCookieを削除します。もちろん、これが目的の場合は、この役割を逆にすることもできます。 。
私はこれをGoogleAnalyticsなどのサードパーティのCookieでテストしましたが、うまく機能しているようです(___utmb
_ Cookieを除いて、Google Analyticsで取得されなくなったことを意味します)。これを使用して、特定のCookieに適合させることができます。ニーズ。
参照用にCookie名が___utmb
_でないかどうかについての部分を含めましたが、これらの値を配列から簡単に取得して、そのようにループすることができます。
基本的に、この関数には、if( cookie_name.trim() != '__utmb' ) { all_cookies = all_cookies + cookies[i] + ";"; }
を示す部分で指定されたものを除くすべてのCookieが含まれます。
ORまたはANDフィルターを使用してこれに追加するか、配列、データベース、ユーザー入力、または特定のものを除外したいものからプルすることができます(必須Cookieと非必須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; } );
}
}
_
完全に無効にすることはできませんが、デフォルト設定を.htaccess
で上書きできます。
試してみてください
SetEnv session.use_cookies='0';
一部のユーザーにとってオプションの場合は、.htaccess
を使用しないでください
if(!$isAuth)
{
ini_set('session.use_cookies', '0');
}
少し古いですが、私はあなたがうまくいく答えに値すると思います:
手順1:サードパーティのスクリプトコードを実行しないでください。
ステップ2:Cookieバナーを表示します。
ステップ3:ユーザーが同意するまで待ちます。これで、サードパーティのスクリプトコードを実行できます。
私のために働いた。