Saltar al contenido

Wordpress – ¿Por qué dice: ‘Las cookies están bloqueadas o no son compatibles’?

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:

  1. 'wordpress_logged_in_' . COOKIEHASH
  2. y también 'wordpress_' . COOKIEHASHo'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:

  1. Siempre revise su navegador primero. Asegúrese de que pueda guardar cookies de PHP.
  2. Si ha migrado recientemente, verifique las URL antiguas en su base de datos, luego verifique su wp-config.php ajustes.
  3. Si movió su administrador de WordPress, debe configurar su cookie de ruta de administrador en wp-config.php.
  4. Verifique sus rutas de cookies, dominios y protocolos para asegurarse de que coincidan.
  5. Asegúrese de no enviar encabezados prematuramente.
  6. 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *