Solución:
Cuando inicias sesión en el administrador, WordPress establece cookies (en PHP) para mantenerte conectado mientras navegas por tu sitio. Si esto falla, recibirá el mensaje de error “Las cookies están bloqueadas o no son compatibles con su navegador”.
Esto podría fallar de un par de formas diferentes, pero antes de profundizar en esas situaciones, echemos un vistazo a la fuente de estos mensajes de error:
wp-login.php
v5.1.1
if ( empty( $_COOKIE[ LOGGED_IN_COOKIE ] ) )
if ( headers_sent() )
$user = new WP_Error(
'test_cookie',
sprintf(
/* translators: 1: Browser cookie documentation URL, 2: Support forums URL */
__( 'ERROR: Cookies are blocked due to unexpected output. For help, please see this documentation or try the support forums.' ),
__( 'https://codex.wordpress.org/Cookies' ),
__( 'https://wordpress.org/support/' )
)
);
elseif ( isset( $_POST['testcookie'] ) && empty( $_COOKIE[ TEST_COOKIE ] ) )
// If cookies are disabled we can't log in even with a valid user+pass
$user = new WP_Error(
'test_cookie',
sprintf(
/* translators: %s: Browser cookie documentation URL */
__( 'ERROR: Cookies are blocked or not supported by your browser. You must enable cookies to use WordPress.' ),
__( 'https://codex.wordpress.org/Cookies' )
)
);
Contexto de falla
1. LOGGED_IN_COOKIE
cheque
Si el LOGGED_IN_COOKIE
falta, algo salió mal y no podemos continuar. Ésta es la primera indicación de que hay un problema. Luego, el código busca 2 problemas más específicos para aclarar el mensaje de error devuelto.
2. headers_sent
cheque
La primera prueba es para headers_sent
que es una función central de PHP para determinar si sus encabezados de respuesta se han reunido y enviado de vuelta al usuario que realiza la solicitud. No deberían enviarse en este punto. Si es así, tiene un problema que debe resolverse antes de que un usuario pueda iniciar sesión.
Este es también el caso menos abordado para la mayoría de los problemas planteados aquí para esta pregunta. También genera un mensaje de error ligeramente diferente.
Las cookies se bloquean debido a una salida inesperada.
3. Prueba del estado de las cookies
En esta prueba, WordPress intentó configurar una cookie de prueba y falló. Tenga en cuenta que el cheque es tanto para POST
parámetro de solicitud y cookie faltante. los POST
El parámetro proviene de un campo oculto en el formulario de inicio de sesión: . El nombre de la cookie predeterminado es
wordpress_test_cookie
, pero se puede cambiar a través del TEST_COOKIE
constante. Más sobre esto en un momento.
Este es el escenario más común. Algo ha salido mal que impide que el POST
que se establezca el parámetro o que se establezca la cookie de prueba.
Echemos un vistazo a los escenarios que podrían causar que esto suceda.
Problemas y soluciones comunes
1. Su navegador bloquea las cookies
Esta es la intención original de estos controles. Es común que los navegadores bloqueen las cookies “no seguras” o los rastreadores comunes. Incluso es bastante común que la mayoría de las personas bloqueen las cookies por completo y solo permitan que se establezcan ciertas cookies después de que se descubren (o no se detectan). Es por eso que el mensaje de error está redactado de esta manera.
Solución: habilite las cookies en su navegador.
2. Su sitio envía encabezados prematuramente
En algún lugar de su código, probablemente tenga una llamada para enviar encabezados como este: header('Location: https://google.com/');
(por ejemplo). Enviar un encabezado de esta manera puede acabar con el proceso de construcción del encabezado completo antes de enviarlo como respuesta. No voy a entrar en más detalles aquí porque también obtendría un mensaje de error diferente. Leer más: Las cookies de error de la página de inicio de sesión están bloqueadas debido a una salida inesperada.
Solución: compruebe que no está enviando encabezados antes de tiempo.
3. Las cookies no se guardan
Esta es la situación más común en la que se encuentran los desarrolladores, especialmente al migrar sitios.
setcookie( $name , $value, $expires );
Las cookies son bastante simples. Por lo general, tienen un nombre, valor y fecha de vencimiento. El resto de los parámetros generalmente se dejan en los valores predeterminados.
setcookie( $name , $value, $expires, $path, $domain, $secure, $httponly );
WordPress establece explícitamente estos valores predeterminados para la ruta, el dominio y el protocolo. Si estos no son 100% correctos, la cookie simplemente desaparece. Esto es por seguridad. No querrá que las cookies que establezca en su sitio estén disponibles para nadie más, de lo contrario, alguien podría acceder al administrador de su sitio y la autenticación de WordPress no tendría valor.
NOTA: La ruta es la ruta base desde la que está disponible la cookie. Si está configurado para
/
, luego estará disponible para todo el sitio. Si está configurado para/wp-admin
, solo las URL que comienzan con/wp-admin
podrá acceder a él. Por ejemplo, no lo vería en la página de inicio de su sitio.
Solución: Esto es un poco más complicado. Echemos un vistazo más profundo.
La galleta de prueba
`wp-login.php v5.1.1
$secure = ( 'https' === parse_url( wp_login_url(), PHP_URL_SCHEME ) );
setcookie( TEST_COOKIE, 'WP Cookie check', 0, COOKIEPATH, COOKIE_DOMAIN, $secure );
if ( SITECOOKIEPATH != COOKIEPATH )
setcookie( TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN, $secure );
Primero, WordPress está verificando su URL de inicio de sesión para ver si usa https o no. $secure
se está utilizando para configurar la cookie para responder a solicitudes http o https, no ambos.
Constantes de cookies
A continuación, tenemos que investigar algunas de estas constantes que están enturbiando las aguas.
COOKIEPATH
y SITECOOKIEPATH
determinar la ruta desde la que está disponible la cookie. SITECOOKIEPATH
anula COOKIEPATH
. Mantén esto en mente. Esto será importante más adelante.
COOKIE_DOMAIN
determina el dominio desde el que está disponible la cookie, p. ej. yourdomains.com
. Si se establece en falso, utilizará el dominio actual.
ADMIN_COOKIE_PATH
no está en la fuente anterior, pero se usará más adelante. Ten paciencia conmigo en este. Esta es la ruta a su panel de WordPress.
Estas constantes las establece WordPress, pero se pueden cambiar. Echemos un vistazo a la fuente.
/wp-includes/default-constants.php
v5.1.1
if ( ! defined( 'COOKIEPATH' ) )
define( 'COOKIEPATH', preg_replace( '
if ( ! defined( 'SITECOOKIEPATH' ) )
define( 'SITECOOKIEPATH', preg_replace( '
if ( ! defined( 'ADMIN_COOKIE_PATH' ) )
define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH . 'wp-admin' );
if ( ! defined( 'TEST_COOKIE' ) )
define( 'TEST_COOKIE', 'wordpress_test_cookie' );
Ahora estamos empezando a tener algo de claridad.
COOKIEPATH
utiliza la URL de su hogar almacenada en su base de datos. Por lo general, esto se establece en su wp-config.php
archivo como la constante WP_HOME
.
SITECOOKIEPATH
anula COOKIEPATH
(¿recuerdas?) y eso proviene de la URL de tu sitio almacenada en la base de datos. En tus wp-config.php
archivo este es tu WP_SITEURL
constante.
Si no coinciden, existe la posibilidad de que tenga un problema.
Es por eso que ves que la gente recomienda configurarlos con un parámetro de servidor:
define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);
Esta configuración asegura que su sitio responda con el dominio correcto. Funciona en la mayoría de los casos, pero debe utilizarse con precaución.
Descargo de responsabilidad: Siempre debe buscar / reemplazar en su base de datos las URL antiguas y cambiarlas por su nueva URL. Por favor, no crea que lo anterior solucionará todo. No lo hará.
Depurar cookies
Para depurar este problema, intente generar estas constantes en su wp-login.php
página como esta:
add_action( 'login_init', 'my_login_init' );
function my_login_init()
echo 'Cookie path: ';
var_dump( COOKIEPATH );
echo '
Cookie site path: ';
var_dump( SITECOOKIEPATH );
echo '
Cookie domain: ';
var_dump( COOKIE_DOMAIN );
echo '
Admin cookie path: ';
var_dump( ADMIN_COOKIE_PATH );
Esto le dará una buena idea de qué parámetros se están utilizando para configurar sus cookies. Si estos no coinciden con la configuración de su sitio o con sus expectativas, debe abordarlos para asegurarse de que su cookie esté configurada correctamente.
Puede establecerlos explícitamente en su wp-config.php
expediente:
// False setting for the domain uses the current domain.
define('COOKIE_DOMAIN', false);
// Setting to / will only work if your site is set to the root domain.
define('COOKIEPATH', '/');
define('SITECOOKIEPATH', '/');
Cookies de autorización
Todo lo anterior tiene que ver con la cookie de prueba que es la fuente del mensaje de error, pero hay un paso más más allá de eso: sus cookies de autorización.
WordPress establece un montón de cookies, según el contexto. Para iniciar sesión, necesitará estos:
'wordpress_logged_in_' . COOKIEHASH
- y también
'wordpress_' . COOKIEHASH
o'wordpress_sec_' . COOKIEHASH
Estas cookies deben tener la ruta, el protocolo y el dominio correctos o no podrá iniciar sesión.
Afortunadamente, la mayoría de esas comprobaciones se realizan con la cookie de prueba que ya vimos. La única diferencia es con la ruta de administración:
define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH . 'wp-admin' );
Si la ruta a su administrador es diferente a yourdomain.com/wp-admin
, debe configurar esto en su wp-config.php
archivo como este:
define( 'ADMIN_COOKIE_PATH', '/path/to/wp-admin' );
Conclusión
Este es un problema complicado. Existen múltiples causas para lo que parece ser el mismo problema.
Si recibe este error, tendrá que realizar una depuración para averiguar qué está pasando. Aquí hay algunas sugerencias:
- Siempre revise su navegador primero. Asegúrese de que pueda guardar cookies de PHP.
- Si ha migrado recientemente, verifique las URL antiguas en su base de datos, luego verifique su
wp-config.php
ajustes. - Si movió su administrador de WordPress, debe configurar su cookie de ruta de administrador en
wp-config.php
. - Verifique sus rutas de cookies, dominios y protocolos para asegurarse de que coincidan.
- Asegúrese de no enviar encabezados prematuramente.
- Verifique para asegurarse de que una capa de almacenamiento en caché como Varnish o CDN como Cloudflare le permita configurar cookies y omitir el caché tanto en el administrador como a través del proceso de inicio de sesión.
¡La mejor de las suertes!
Te mostramos las reseñas y valoraciones de los usuarios
Si crees que ha sido de ayuda nuestro post, sería de mucha ayuda si lo compartieras con más seniors de esta manera nos ayudas a difundir esta información.