Можно ли заблокировать файлы cookie с помощью Javascript или PHP?

Многие из вас, вероятно, знают о новом законодательстве в области конфиденциальности в ЕС, но для тех, кто этого не делает, это в основном означает, что ни один сайт, управляемый резидентом компании в ЕС, не может устанавливать файлы cookie, классифицированные как "несущественные для работы веб-сайт" на компьютере посетителя, если только не будет предоставлено прямое разрешение на это.

Итак, возникает вопрос, как лучше всего справиться с этим?

Браузеры, очевидно, имеют возможность блокировать файлы cookie с определенного веб-сайта, встроенного в них. Мой вопрос в том, есть ли способ сделать что-то подобное с помощью JS или PHP?

то есть. перехватывайте любые файлы cookie, которые могут быть настроены (включая сторонние файлы cookie, такие как Google Analytics или Facebook), и блокируйте их, если пользователь не дал согласие.

Очевидно, что можно удалить все файлы cookie, как только они были установлены, но хотя это и то же, что не позволяет им быть установленным в первую очередь, я предполагаю, что в этом случае он недостаточно хорош, потому что он не соответствует букве закона.

Идеи?

Ответ 1

Мне тоже очень нравится этот ответ. Я выполнил то, что мне нужно выполнить в 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 и не просматривают их, чтобы определить, какие из них получают доступ к document.cookie - они все еще могут устанавливать файлы cookie.

Было бы удобно, если бы все они использовали одну и ту же структуру, поэтому я мог бы переопределить функцию setCookie, но они этого не делают.

Было бы хорошо, если бы я мог просто удалить или отключить document.cookie, чтобы он стал недоступным...

EDIT: Можно предотвратить доступ к 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() {} );
}

Ответ 2

Я адаптировал коды Майклса отсюда, чтобы придумать это.

В основном он использует методы defineGetter и defineSetter, чтобы установить все файлы cookie на странице, а затем удалить указанные пользователем, эта роль, конечно же, может быть отменена, если это то, к чему вы стремитесь.

Я тестировал это с помощью сторонних файлов cookie, таких как Google Analytics, и, как представляется, он работает хорошо (исключая cookie __utmb означает, что я больше не подбираюсь в Google Analytics), возможно, вы можете использовать это и адаптировать его к своему конкретные потребности.

Я включил часть, если имя cookie не является __utmb для вашей ссылки, хотя вы можете легко взять эти значения из массива и пройти через них таким образом.

В основном эта функция будет включать все файлы cookie, кроме тех, которые указаны в части, в которой указано if( cookie_name.trim() != '__utmb' ) { all_cookies = all_cookies + cookies[i] + ";"; }

Вы можете добавить это с помощью фильтров OR или AND или вытащить из массива, базы данных, ввода пользователя или любого другого, что вам нравится, чтобы исключить определенные (полезно для определения между важными и несущественными куками).

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

}

}

Ответ 3

Вы не можете отключить его полностью, но вы можете переопределить значение по умолчанию с помощью .htaccess

Try

 SetEnv session.use_cookies='0';

Если для некоторых пользователей необязательно использовать .htaccess

if(!$isAuth)
{
    ini_set('session.use_cookies', '0');
}

Ответ 4

Немного стар, но я думаю, что вы заслуживаете ответ, который работает:

Шаг 1. Не выполняйте сторонний код скрипта.

Шаг 2. Показать баннер cookie.

Шаг 3: Дождитесь, пока пользователь примет, теперь вы можете выполнить код скрипта третьей стороны.

Работал на меня.

Ответ 5

Как насчет не обращая внимания на мистификацию?

Помимо того, что это старые новости, в тексте четко сказано, что это относится только к файлам cookie , не имеющим существенного значения для функции сайта. Значение файлов cookie сеанса, корзины покупок или всего, что непосредственно связано с созданием сайта, отлично. Все остальное (отслеживание, статистика и т.д.) "Запрещено" без разрешения.