В Евросоюзе относительно недавно появилась проблема: законодательство потребовало от сайтов использовать куки только в случае согласия пользователя. Конечно, это не относится к таким важным для работоспособности сайта вещам, как авторизация, но социальные кнопки, видео со сторонних сервисов не могут сохранять информацию в куках без одобрения юзера.
Конечно, уже появилиь некоторые платные решения для сайтов, однако, они не универсальны и несовершенны, например, плагин Monster Cookies. Промучившись с ним, я его полностью снес, позаимствовав лишь некоторые стили оформления диалогового окна.
На сайте стояли кнопки соцсетей, Гугл Аналитикс, модуль видео от Vimeo. Мне удалось закрыть это все с возможностью выбора для пользователя «Accept Cookies». Использовал как JavaScript, так и php.
Принцип прост: если пользователь нажимал «принять куки», в куках сохранялась переменная cookies_accept. Далее в зависимости от ее существования уже подгружался (или нет) закрытый контент.
Что-то типа такого:
if(isset($_COOKIE["cookies_accept"]) && $_COOKIE["cookies_accept"]=="accept"):
//не меняем output
else:
$output="<img src='картинка' title='You need to accept the cookies to use it'>";
endif;
JavaScript:
<script>
function setCookie (name, value, expires, path, domain, secure) {
document.cookie = name + "=" + escape(value) +
((expires) ? "; expires=" + expires : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
function getCookie(name) {
var cookie = " " + document.cookie;
var search = " " + name + "=";
var setStr = null;
var offset = 0;
var end = 0;
if (cookie.length > 0) {
offset = cookie.indexOf(search);
if (offset != -1) {
offset += search.length;
end = cookie.indexOf(";", offset)
if (end == -1) {
end = cookie.length;
}
setStr = unescape(cookie.substring(offset, end));
}
}
return(setStr);
}
cookies_accept="";
cookies_accept = getCookie("cookies_accept");
if(cookies_accept=="accept"){
request=jQuery.ajax({
type: 'POST',
url: '/ajax/get_video.php',
data: 'sss=1',
success: function(request) {
jQuery('.vimeo').html(request);
}
});
jQuery("div.cc-cookies").addClass('content-hidden');
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-xxxxx']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
}else{
jQuery(".cc-cookies").removeClass('content-hidden');
}
jQuery(document).ready(function(){
jQuery("#accept").click(function(){
jQuery("div.cc-cookies").addClass('content-hidden');
setCookie("cookies_accept", "accept");
});
});
</script>
Хочется создать какое-то универсальное решение для всех сайтов, но пока ничего не придумал. У каждого свои особенности.