Чтобы использовать 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/
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Дмитрий
# Дмитрий 12.01.2018 20:05
Как в режиме мультисайт сделать регистрацию пользователей не на основном домене сети, а на том сайте на котором он нажал «зарегистрироваться»?
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Павел А. Сафронов
# Павел А. Сафронов 14.01.2018 00:31
Дмитрий, есть плагин, который должен Вам помочь, если я правильно понял задачу - wordpress.org/plugins/network-subsite-user-registration/.

В описании говорится (перевод): ‘Network Subsite User Registration’ (NSUR) плагин убирает ограничение из-за которого регистрация происходит только на основном сайте Сети,
администраторы дочерних сайтов теперь могут позволить пользователям регистрацию только на их сайте.

Еще там примечание для девелоперов: Если вы желаете использовать собственный шаблон страницы авторизации, вы можете переопределить страницу ../local-signup, создав файл "page-signup.php" в папке шаблона родительской или дочерней темы.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Айнур
# Айнур 24.01.2018 18:35
Делали сайт сначала на поддомене с мультисайтами, чтоб главный не затрагивать. Перенесли и вылезла эта ошибка. Несколько часов возился с этим. А помогло следующее:
1. отключил плагины через базу данных, простое удаление каталогов на хостинге - роняло сайт.
2. в файле wp-config везде где упоминалось MULTISITE добавил значение false.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Олег
# Олег 22.02.2018 15:30
Никак не могу избавитстя от ошибки «Cookies либо заблокированы, либо не поддерживаются вашим браузером. Чтобы использовать WordPress, нужно разрешить cookies». Появилась после смены хостинга. BOMов нет точно - проверено. Пробовал добавить вашу строку в файл wp-config.php - железобетонно. Как открыть админку ума не приложу.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
strannik
# strannik 20.04.2018 19:49
Успех!
На локальном сервере восстановил копию с прода - возникла описанная проблема и её решил с помощью описанной автором строчки кода.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Максим
# Максим 09.11.2018 23:14
Привет! У меня тоже возникла такая ошибка. Я перенёс сайт к другому хостеру, и решил подключить ssl. Открыл файл базы в notepad ++ и поиском заменил все http:// на // . После этого и стала ошибка появляться. Я тогда вернул файл базы в исходное состояние и поиском заменил http:// на https:// и импортировал файл базы в phpmyadmin. Ошибка пропала.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Елена
# Елена 21.04.2020 12:45
Ура! спасибо.
Помогло добавить 's' в адреса сайта, через базу данных. Ошибка ушла.
Видимо действительно ошибка была вызвана SSL сертификатом.
Изначально сайт разрабатывался локально и переносился на хостинг с доменом, к которому уже был подключен SSL сертификат.
Поменяла http на https.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору