перестал работать код с cookies после нововведений chrome
Есть такой код, который показывает модалку после определенного времени. После обновлений хрома - It has been blocked, as Chrome now only delivers cookies with cross-site requests if they are set with SameSite=None and Secure.
Попробовал вписать атрибуты но все равно не то.
Код:
function setCookie(key, value, expiry) {
var expires = new Date();
expires.setTime(expires.getTime() + (expiry * 24 * 60 * 60 * 1000));
document.cookie = key + '=' + value + ';path=/;SameSite=None;Secure;expires=' + expires.toUTCString(); }
function getCookie(key) {
var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
return keyValue ? keyValue[2] : null; }
if(getCookie('showfromcitymodal') == '-1'){
setCookie('showfromcitymodal','1','30'); // 30 дней
$('#fromcity').modal('show'); }
Кто-то может подсказать в чем ошибка? 2й день пробую разные варианты и не работает
Ответы (3 шт):
Я решил эту проблему отключением, т.к. некоторые говорят, что сам SameSite=None не всегда работает в хроме.
- chrome://flags
- SameSite by default cookies
- Disabled
Если кто-то решал по другому, пишите в комментарии, мне тоже интересно :)
убрал лишний код и неправильное (на данный момент ибо ранее этот древний код работал) сравнение проверки существования куки.
а с SameSite и Secure, как оказалось не связано (ранее в коде их не было и работал)
вот рабочий код:
function getCookie(g_name) {
var keyValue = document.cookie.match('(^|;) ?' + g_name + '=([^;]*)(;|$)');
return keyValue ? keyValue[2] : null; }
function setCookie(s_name) {
var expires = new Date();
expires.setTime(expires.getTime() + (30 * 24 * 60 * 60 * 1000)); // 30 дней
document.cookie = s_name + '=shown;path=/;expires=' + expires.toUTCString() + ';secure'; }
if(!getCookie("choosecity")){
setCookie("choosecity");
$('#fromcity').modal('show'); }
Параметр Secure указывает на то, что кук будут передаваться только по защищенному соединению - по протоколу https.
Параметр SameSite=none указывает на то, что кук будут передаваться по https, когда сайт загружается у третьих лиц, т.е. в iframe или при использовании кросс-сайтовых запросов. Так же вместе с этим параметром должен быть установлен параметр Secure.