Salud del Sitio: Se detectó una sesión PHP activa
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!

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 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.

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
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.

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.

He descubierto que WP e-Store provoca:
- Se detectó una sesión PHP activa
- La API REST encontró un error
WP SpamShield provoca:
- 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

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.

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.

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.
