Site Health: È stata rilevata una sessione PHP attiva
Sono nuovo nello sviluppo WordPress e ho appena creato il mio primo tema.
Nel mio wp-admin, il "Site Health"
mi segnala che è stata rilevata una sessione PHP (errore critico), ecco il messaggio:
Una sessione PHP è stata creata da una chiamata alla funzione session_start(). Questo interferisce con le richieste REST API e loopback. La sessione dovrebbe essere chiusa con session_write_close() prima di effettuare qualsiasi richiesta HTTP.
Ho bisogno di $_SESSION
PHP per uno script del tema, e ho aggiunto questo al mio file functions.php per inizializzare correttamente le sessioni:
<?php
// Se non esiste già un ID di sessione, avvia una nuova sessione
if (!session_id()) {
session_start();
}
Se elimino queste righe, il messaggio scompare, ma le mie sessioni PHP non funzionano più.
Se mantengo queste righe, tutto sembra funzionare correttamente ma questo messaggio è preoccupante...
Qualcuno ha un'idea per risolvere questo problema mantenendo la possibilità di utilizzare $_SESSION
?
La mia versione di WP è 5.5.3
e la versione PHP è 7.4.8
.
Grazie in anticipo per il vostro aiuto!

Questo risolverebbe il problema di due plugin che cercano entrambi di avviare sessioni, ma non risolverebbe l'avviso di Site Health nella domanda perché WordPress non vuole che tu usi session_start affatto.

@rup Stavo ricevendo un avviso critico riguardante le sessioni in WordPress "site health". Ho applicato il codice sopra e ha risolto il mio problema.

Grazie Shiv, Se uso la tua soluzione, il messaggio di errore scompare ma non posso più usare $_SESSION nei miei script PHP, non vengono più inizializzati :-(

@Loraga
session_start ( array $options = [] ) : bool
session_start() crea una sessione o riprende quella corrente basandosi su un identificatore di sessione passato tramite una richiesta GET o POST, o passato tramite un cookie.
Può essere fornita anche un'opzione read_and_close
. Se impostata a true, ciò comporterà la chiusura immediata della sessione dopo la lettura, evitando così blocchi non necessari se i dati della sessione non verranno modificati.
Per favore consulta link
Penso che nel tuo caso tu debba avviare la sessione e reinserire i valori in essa.

Nel mio caso questo era causato dal plugin "Contact Form by BestWebSoft".
Se ti trovi nella stessa situazione devi disabilitare i plugin uno per uno e aggiornare la pagina /wp-admin/site-health.php
per verificare se l'errore è ancora presente.
Come spiegato qui https://stackoverflow.com/questions/64377032/getting-an-active-php-session-was-detected-critical-warning-in-wordpress questo è dovuto a un plugin sviluppato male.

Ho scoperto che WP e-Store causa:
- È stata rilevata una sessione PHP attiva
- L'API REST ha riscontrato un errore
WP SpamShield causa:
- È stata rilevata una sessione PHP attiva
Esaminerò il codice per vedere se riesco a trovare un modo per risolvere questi problemi nei plugin. Senza e-Store, il sito sarebbe praticamente inutilizzabile!
Se qualcuno avesse già trovato e risolto questi problemi in uno di questi plugin, mi piacerebbe sapere cosa ha funzionato.
jshumphrey@gmail.com

Benvenuto su WPSE. Di norma, non offriamo supporto per plugin di terze parti. Tuttavia, mi sembra che potresti riformulare la tua domanda per chiedere come correggere il problema a livello di codice. Per quanto riguarda i bug dei plugin stessi, il massimo che posso fare è suggerirti di chiedere supporto dove viene offerto per questi plugin.

Avevo esattamente lo stesso problema. Dopo molti tentativi di agganciare la chiamata a session_start()
in altri punti del processo di caricamento di WordPress, un collega mi ha suggerito di provare a sostituire il mio codice in functions.php con il seguente:
if(session_status() == PHP_SESSION_NONE) {
session_start();
}
Questo sembra aver risolto entrambi i problemi che avevo, eliminando l'errore in WordPress e permettendo ai miei utenti frontend di accedere al sistema che avevo creato.

Grazie alla risposta di @Lee e al link di @shiv alla documentazione PHP per session_start, ho trovato questa soluzione che ha risolto i miei problemi. Potrebbe funzionare anche nel caso dell'OP.
if (session_status() == PHP_SESSION_NONE) {
session_start([
'cookie_lifetime' => 86400,
'read_and_close' => true,
]);
}
Da notare che il problema persisteva anche con tutti i plugin disattivati.
