Salud del Sitio: Se detectó una sesión PHP activa

1 nov 2020, 17:32:14
Vistas: 23.1K
Votos: 4

Soy nuevo en el desarrollo de WordPress y acabo de crear mi primer tema.

En mi wp-admin, la sección "Site Health" me indica que se ha detectado una sesión PHP (error crítico), este es el mensaje:

Se creó una sesión PHP mediante una llamada a la función session_start(). Esto interfiere con la API REST y las solicitudes de loopback. La sesión debe cerrarse con session_write_close() antes de realizar cualquier solicitud HTTP.

Necesito $_SESSION de PHP para un script del tema, y agregué esto a mi archivo functions.php para que las sesiones se inicialicen correctamente:

<?php

if (!session_id()) { 
    session_start(); 
}

Si elimino estas líneas, el mensaje desaparece, pero mis sesiones PHP dejan de funcionar.

Si mantengo estas líneas, todo parece funcionar correctamente pero este mensaje es preocupante...

¿Alguien tiene una idea para resolver este problema manteniendo la capacidad de usar $_SESSION?

Mi versión de WP es 5.5.3 y la versión de PHP es 7.4.8.

¡Gracias de antemano por su ayuda!

4
Comentarios

No lo creo, no. Creo que esto es WordPress diciéndote que quiere que uses algo diferente a $_SESSION. O usas otra cosa o simplemente ignora la advertencia (si estás seguro de que no romperá nada). Supongo que habrá alguna forma de suprimir la advertencia con un filtro si investigas.

Rup Rup
2 nov 2020 15:25:59

O quizás lo esté interpretando mal: tal vez está bien que uses $_SESSION siempre y cuando no hagas solicitudes a servicios web externos?

Rup Rup
2 nov 2020 15:33:30

¡Gracias por tu ayuda Rup! Es molesto para mí tener que usar algo diferente a $_SESSION. ¿Quizás a WordPress no le gustan las sesiones? Hacer que ese mensaje desaparezca con un filtro no resolverá nada. Lo que me preocupa es que este mensaje está marcado como un error crítico. Pensé que había otra forma de inicializar y usar sesiones con WordPress, y tal vez lo estaba haciendo mal. Sobre las solicitudes a servicios web externos, no sé si esto tiene algún impacto.

Loraga Loraga
2 nov 2020 17:48:51

En mi caso, fue causado por el plugin "Send PDF for Contact Form 7". Lo desactivé y se resolvió. Creé un ticket de soporte con el desarrollador del plugin.

atmomin2003 atmomin2003
12 feb 2021 00:40:23
Todas las respuestas a la pregunta 5
5

Me enfrenté al mismo problema.

Reemplacé el código

session_start();

con

if (!isset($_SESSION)) {
  session_start(['read_and_close' => true]);
}

y funcionó para mí.

29 ene 2021 06:26:27
Comentarios

Eso solucionaría que dos plugins intenten iniciar sesiones, pero no arreglaría la advertencia de Salud del Sitio en la pregunta porque eso se debe a que WordPress no quiere que uses session_start en absoluto.

Rup Rup
29 ene 2021 11:53:57

@rup Estaba recibiendo una advertencia crítica sobre sesiones en la "salud del sitio" de WordPress. Así que apliqué el código anterior y resolvió mi problema.

Shiv Babbar Shiv Babbar
31 ene 2021 09:49:45

Gracias Shiv, Si uso tu solución, el mensaje de error desaparece pero ya no puedo usar $_SESSION en mis scripts PHP, ya no se inicializan :-(

Loraga Loraga
15 feb 2021 13:43:48

@Loraga session_start ( array $options = [] ) : bool session_start() crea una sesión o reanuda la actual basándose en un identificador de sesión pasado mediante una solicitud GET o POST, o pasado a través de una cookie. También se puede proporcionar una opción read_and_close. Si se establece en true, esto hará que la sesión se cierre inmediatamente después de ser leída, evitando así bloqueos innecesarios si los datos de la sesión no van a ser modificados. Por favor, consulta enlace

Creo que en tu caso tienes que iniciar la sesión y volver a poner los valores en ella.

Shiv Babbar Shiv Babbar
16 feb 2021 03:38:27

Gracias por el enlace @shiv.

MiB MiB
21 dic 2022 17:45:38
1

En mi caso, esto fue causado por el plugin "Contact Form by BestWebSoft".

Si te encuentras en la misma situación, debes desactivar los plugins uno por uno y actualizar la página /wp-admin/site-health.php para verificar si el error persiste.

Como se explica aquí https://stackoverflow.com/questions/64377032/getting-an-active-php-session-was-detected-critical-warning-in-wordpress, esto se debe a un plugin mal desarrollado.

28 dic 2020 13:52:45
Comentarios

Gracias Francesco, Ya había desactivado todas las extensiones antes de hacer mi pregunta aquí, desafortunadamente, esto no resolvió el problema. No uso ninguna de las extensiones mencionadas.

Loraga Loraga
15 feb 2021 13:46:13
1

He descubierto que WP e-Store provoca:

  1. Se detectó una sesión PHP activa
  2. La API REST encontró un error

WP SpamShield provoca:

  1. Se detectó una sesión PHP activa

Voy a revisar el código para ver si encuentro la forma de solucionarlo en estos plugins. ¡Sin e-Store, el sitio básicamente queda inutilizable!

Si alguien ya ha encontrado y solucionado alguno de estos problemas con los plugins, me encantaría saber qué funcionó.

jshumphrey@gmail.com

13 mar 2021 05:18:32
Comentarios

Bienvenido a WPSE. Como norma, no ofrecemos soporte para plugins de terceros. Sin embargo, me parece que podrías reformular tu pregunta para consultar sobre cómo corregir el fallo mediante programación. No obstante, para los errores relacionados con los plugins en sí mismos, lo mejor que puedo hacer es sugerirte que consultes donde se ofrezca soporte para estos plugins.

Matthew Brown aka Lord Matt Matthew Brown aka Lord Matt
13 mar 2021 11:44:42
1

Tuve exactamente este mismo problema. Después de muchos intentos de enganchar la llamada a session_start() en otros lugares dentro del proceso de carga de WordPress, un compañero me sugirió que intentara reemplazar mi código en functions.php con lo siguiente:

if(session_status() == PHP_SESSION_NONE) {
    session_start();
}

Esto pareció solucionar ambos problemas que tenía, eliminar el error en WordPress y permitir que mis usuarios frontend iniciaran sesión en el sistema que había creado.

26 jul 2021 12:35:59
Comentarios

Gracias @Lee. Sin embargo, esto no fue suficiente en mi caso, así que desarrollé mi propia solución basada en la tuya. Mira la respuesta.

MiB MiB
21 dic 2022 17:36:25
0

Gracias a la respuesta de @Lee y al enlace de @shiv a la documentación de PHP para session_start, llegué a esto que resolvió mis problemas. Podría funcionar también en el caso del OP.

if (session_status() == PHP_SESSION_NONE) {
    session_start([
        'cookie_lifetime' => 86400,
        'read_and_close' => true,
    ]);
}

Se puede notar que este problema persistía incluso con todos los plugins desactivados.

21 dic 2022 17:40:47