Можно ли заблокировать файлы 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 сеанса, корзины покупок или всего, что непосредственно связано с созданием сайта, отлично. Все остальное (отслеживание, статистика и т.д.) "Запрещено" без разрешения.