Чтобы использовать WordPress, нужно разрешить cookies

[Решено] Чтобы использовать WordPress, нужно разрешить cookies

Опубликовано в Веб-разработка

После установки MULTISITE в WordPress (v 4.4.2) и последующем изменении адреса сайта с поддомена на домен (например, с http://test.timeweb.com/ на http://test.ru/), появлялась ошибка «Cookies либо заблокированы, либо не поддерживаются вашим браузером. Чтобы использовать WordPress, нужно разрешить cookies.».

Было много копотни, но наконец-то удалось сделать так, чтобы переменная COOKIE_DOMAIN нормально передавалась.

Ранее я находил решение вовсе отключить куки через define('COOKIE_DOMAIN', false);, но полностью отключать куки мне не хотелось как и править системные файлы, которые править не надо бы.

Поэтому выход такой — добавить следующую строку в файл wp-config.php перед строкой /* That’s all, stop editing! Happy blogging. */

define('COOKIE_DOMAIN', strtolower( stripslashes( $_SERVER['HTTP_HOST'] ) ) );

Добавить комментарий


Защитный код
Обновить

Комментарии  

Кирилл
# Кирилл 07.03.2017 05:06
НЕ РЕШЕНО.
После добавления строчки WP стал на нее ругаться:
"The constant "COOKIE_DOMAIN" is defined (probably in wp-config.php). Please remove or comment out that define() line."

Может быть, это когда-то работало для каких-то ушедших в небытиё версий, сейчас - не работает.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Павел А. Сафронов
# Павел А. Сафронов 07.03.2017 08:29
Кирилл, вполне возможно, что строка c объявлением 'COOKIE_DOMAIN' уже присутствует в коде и имеет вид "define('COOKIE_DOMAIN', false);", в этом случае следует ее ЗАМЕНИТЬ следующей строкой "define('COOKIE_DOMAIN', strtolower( stripslashes( $_SERVER['HTTP_HOST'] ) ) );" (без кавычек).
Если первоначальная строка имеет другой вид, отличный от "define('COOKIE_DOMAIN', false);", есть смысл ее закомментировать, установив прямо перед ней две косые черты "//", убедившись, чтобы в строке редактора эта запись одна (чтобы остальной код этой строки, если он есть, не был закомментирован), а после того, как строка будет закомментирована, то следующей строкой вставить эту "define('COOKIE_DOMAIN', strtolower( stripslashes( $_SERVER['HTTP_HOST'] ) ) );" (без кавычек).
Попробуйте такой вариант, напишите о результате.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Кирилл
# Кирилл 09.03.2017 19:18
Ваш подход оказался правильным. Нашелся файл, который ругался. После удаления из него кода вида

"if ( defined( 'COOKIE_DOMAIN' ) ) {die( ... и так далее... "

сообщение «Cookies либо заблокированы, либо не поддерживаются ...» больше не появляется.
Да и сама ошибка выглядит какой-то мутной, и успешно живет в WP уже много лет. Если посмотреть код, то для чего-то проводится проверка куки, а если куки в браузере действительно заблокированы, тогда код позволяет входить в админ без куки. Это или чей-то бэкдор, или попытка обеспечить обратную совместимость плагинов, или ещё чего-то кому-то зачем-то.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Кирилл
# Кирилл 09.03.2017 19:22
В моем случае виноватым оказался файл wp-content/sunrise.php от плагина WordPress MU Domain Mapping, позволяющего переадресовывать сайты мультисайтной WordPres на другие доменные имена.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
A.F.
# A.F. 25.03.2017 13:32
А мне не помогло.

Причём картина идиотская. Из всей сетки не залогиниться нормально только на один, недавно перенесённый сайт.

Но если добавить в wp-config.php

define('ADMIN_COOKIE_PATH', '/');
define('COOKIE_DOMAIN', '');
define('COOKIEPATH', '');
define('SITECOOKIEPATH', '');

то на него залогиниться можно. Но нельзя на всё остальное.

Три часа сегодня убил в попытках починить. Безрезультатно.

ps: капча у тебя лютая, с пятого раза прочёл.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Павел А. Сафронов
# Павел А. Сафронов 10.04.2017 16:02
Здравствуй! Прости, что так долго не отвечал. Маловероятно, конечно, что проблема еще присутствует, ее можно было за такой срок решить =) но если она есть, пиши, будем разбираться. Если решил, то поделись - как? И кстати, этот один сайт ты каким образом добавлял к сети сайтов?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Андрей
# Андрей 24.09.2017 03:54
Здравствуйте!
Мой сайт работает не корректно если Пользователь блокирует куки в своем браузере.

Найти бы-такой плагин для ВордПресс, чтобы он определял, что куки в Браузере Пользователя запрещены и просил Пользователя разрешить куки.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Павел А. Сафронов
# Павел А. Сафронов 24.09.2017 12:50
Андрей, на самом деле это не хорошо, если сайт работает некорректно при отключенных Cookies. Вы можете иметь дополнительный функционал, зависящий от них, но от этого не должен зависеть основной функционал. Также неправильно вынуждать пользователя включать Cookies, ровно как и JavaScript. Вот плагин для WopdPress для уведомления об использовании Cookies на сайте. В тексте вы можете призвать пользователей включить куки, но большинство из них скорее всего не знает как это делать, поэтому подготовьте краткую пошаговую инструкцию на всякий случай. Плагин : wordpress.org/plugins/uk-cookie-consent/
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору