Site Health: A fost detectată o sesiune PHP activă
Sunt nou în dezvoltarea WordPress și tocmai mi-am creat prima mea temă.
În wp-admin, "Site Health"
îmi spune că a fost detectată o sesiune PHP (eroare critică), iată mesajul:
O sesiune PHP a fost creată prin apelarea funcției session_start(). Aceasta interferează cu REST API și cererile loopback. Sesiunea ar trebui închisă prin session_write_close() înainte de a face orice cereri HTTP.
Am nevoie de $_SESSION
PHP pentru un script al temei, și am adăugat aceasta în fișierul meu functions.php pentru ca sesiunile să fie inițializate corect:
<?php
if (!session_id()) {
session_start();
}
Dacă șterg aceste linii, mesajul dispare, dar sesiunile mele PHP nu mai funcționează.
Dacă păstrez aceste linii, totul pare să funcționeze corect, dar acest mesaj este îngrijorător...
Are cineva vreo idee cum să rezolv această problemă păstrând în același timp capacitatea de a utiliza $_SESSION
?
Versiunea mea WP este 5.5.3
iar versiunea PHP este 7.4.8
.
Mulțumesc anticipat pentru ajutor!

Aceasta ar rezolva problema a două plugin-uri care încearcă ambele să inițieze sesiuni, dar nu ar remedia avertismentul din Site Health menționat în întrebare, deoarece WordPress nu recomandă deloc utilizarea funcției session_start.

@rup Am primit o avertizare critică legată de sesiuni în "Site Health" din WordPress. Am aplicat codul de mai sus și a rezolvat problema.

Mulțumesc Shiv, Dacă folosesc soluția ta, mesajul de eroare dispare, dar nu mai pot folosi $_SESSION în scripturile PHP, acestea nu mai sunt inițializate :-(

@Loraga
session_start ( array $options = [] ) : bool
session_start() creează o sesiune sau o reia pe cea curentă bazându-se pe un identificator de sesiune transmis prin cerere GET sau POST, sau prin cookie.
De asemenea, poate fi furnizată și o opțiune read_and_close
. Dacă este setată pe true, aceasta va determina închiderea sesiunii imediat după citire, evitând astfel blocaje inutile dacă datele sesiunii nu vor fi modificate.
Vă rugăm să consultați link
Cred că în cazul tău trebuie să pornești sesiunea și să introduci din nou valorile în ea.

În cazul meu, această problemă a fost cauzată de plugin-ul "Contact Form by BestWebSoft".
Dacă vă aflați în aceeași situație, trebuie să dezactivați plugin-urile unul câte unul și să reîmprospătați pagina /wp-admin/site-health.php
pentru a verifica dacă eroarea mai există.
Așa cum este explicat aici https://stackoverflow.com/questions/64377032/getting-an-active-php-session-was-detected-critical-warning-in-wordpress, aceasta se întâmplă din cauza unui plugin prost dezvoltat.

Am descoperit că WP e-Store cauzează:
- S-a detectat o sesiune PHP activă
- API-ul REST a întâlnit o eroare
WP SpamShield cauzează:
- S-a detectat o sesiune PHP activă
Voi analiza codul și voi încerca să găsesc o soluție pentru aceste pluginuri. Fără e-Store, site-ul practic nu funcționează!
Dacă cineva a găsit și a rezolvat problemele la aceste pluginuri, aș dori să știu ce soluție a funcționat.
jshumphrey@gmail.com

Bun venit pe WPSE. Ca regulă generală, nu oferim suport pentru plugin-uri de la terți. Totuși, mi se pare că ai putea reformula întrebarea pentru a cere ajutor în corectarea programatică a problemei. În cazul bug-urilor specifice acestor plugin-uri, cel mai bine este să contactezi suportul oficial oferit de dezvoltatorii lor.

Am avut exact aceeași problemă. După multe încercări de a conecta apelul session_start()
în altă parte a procesului de încărcare WordPress, un coleg mi-a sugerat să înlocuiesc codul din functions.php cu următoarele:
if(session_status() == PHP_SESSION_NONE) {
session_start();
}
Această soluție a rezolvat ambele probleme pe care le aveam, a eliminat eroarea din WordPress și a permis utilizatorilor de pe frontend să se autentifice în sistemul pe care l-am creat.

Mulțumesc răspunsului lui @Lee și linkului lui @shiv către documentația PHP pentru session_start, am ajuns la această soluție care mi-a rezolvat problemele. S-ar putea să funcționeze și în cazul OP.
if (session_status() == PHP_SESSION_NONE) {
session_start([
'cookie_lifetime' => 86400,
'read_and_close' => true,
]);
}
Se poate observa că problema persista chiar și cu toate modulele dezactivate.
