Site Health: È stata rilevata una sessione PHP attiva

1 nov 2020, 17:32:14
Visualizzazioni: 23.1K
Voti: 4

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!

4
Commenti

Non credo proprio. Penso che WordPress ti stia dicendo che vorrebbe che usassi qualcos'altro invece di $_SESSION. O usi qualcos'altro o semplicemente ignori l'avviso (se sei sicuro che non causerà davvero problemi). Immagino ci sia un modo per sopprimere l'avviso con un filtro, se cerchi.

Rup Rup
2 nov 2020 15:25:59

O forse l'ho interpretato male: forse va bene usare $_SESSION finché non fai richieste a servizi web esterni?

Rup Rup
2 nov 2020 15:33:30

Grazie per il tuo aiuto Rup! È fastidioso per me usare qualcosa di diverso da $_SESSION. Forse a WordPress non piacciono le sessioni? Far sparire quel messaggio con un filtro non risolverebbe nulla. Quello che mi preoccupa è che questo messaggio sia segnalato come errore critico. Pensavo ci fosse un altro modo per inizializzare e usare le sessioni con WordPress, e forse lo stavo facendo nel modo sbagliato. Per quanto riguarda le richieste a servizi web esterni, non so se questo abbia un impatto.

Loraga Loraga
2 nov 2020 17:48:51

Nel mio caso, è stato causato dal plugin "Send PDF for Contact Form 7". L'ho disattivato e il problema è stato risolto. Ho creato un ticket di supporto con lo sviluppatore del plugin.

atmomin2003 atmomin2003
12 feb 2021 00:40:23
Tutte le risposte alla domanda 5
5

Anch'io ho affrontato lo stesso problema.

Ho sostituito il codice

session_start();

con

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

e ha funzionato per me.

29 gen 2021 06:26:27
Commenti

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 Rup
29 gen 2021 11:53:57

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

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

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 Loraga
15 feb 2021 13:43:48

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

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

Grazie per il link @shiv.

MiB MiB
21 dic 2022 17:45:38
1

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.

28 dic 2020 13:52:45
Commenti

Grazie Francesco, Avevo già disabilitato tutte le estensioni prima di porre la mia domanda qui, purtroppo questo non ha risolto il problema. Non uso nessuna delle estensioni menzionate.

Loraga Loraga
15 feb 2021 13:46:13
1

Ho scoperto che WP e-Store causa:

  1. È stata rilevata una sessione PHP attiva
  2. L'API REST ha riscontrato un errore

WP SpamShield causa:

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

13 mar 2021 05:18:32
Commenti

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.

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

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.

26 lug 2021 12:35:59
Commenti

Grazie @Lee. Tuttavia, nel mio caso non è stato sufficiente, quindi ho elaborato una mia soluzione basata sulla tua. Vedi risposta.

MiB MiB
21 dic 2022 17:36:25
0

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.

21 dic 2022 17:40:47