Site Health: A fost detectată o sesiune PHP activă

1 nov. 2020, 17:32:14
Vizualizări: 23.1K
Voturi: 4

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!

4
Comentarii

Nu cred, nu. Cred că WordPress îți spune că ar prefera să folosești altceva în loc de $_SESSION. Fie folosești altceva, fie pur și simplu ignori avertismentul (dacă ești sigur că nu va cauza probleme). Presupun că există o metodă de a suprima acest avertisment cu un filtru dacă cauți.

Rup Rup
2 nov. 2020 15:25:59

Sau poate am înțeles greșit: poate e în regulă să folosești $_SESSION atâta timp cât nu faci nicio cerere externă către servicii web?

Rup Rup
2 nov. 2020 15:33:30

Mulțumesc pentru ajutor, Rup! E enervant pentru mine să folosesc altceva în loc de $_SESSION. Poate WordPress nu apreciază sesiunile? Eliminarea acestui mesaj cu un filtru nu rezolvă problema. Ceea ce mă îngrijorează e că acest mesaj e marcat ca eroare critică. Credeam că există o altă metodă de a inițializa și folosi sesiuni în WordPress, și poate am greșit abordarea. În privința cererilor externe către servicii web, nu știu dacă are vreun impact.

Loraga Loraga
2 nov. 2020 17:48:51

În cazul meu, problema a fost cauzată de plugin-ul "Send PDF for Contact Form 7". L-am dezactivat și problema a fost rezolvată. Am creat un tichet de suport pentru dezvoltatorul plugin-ului.

atmomin2003 atmomin2003
12 feb. 2021 00:40:23
Toate răspunsurile la întrebare 5
5

Am avut aceeași problemă.

Am înlocuit codul

session_start();

cu

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

și a funcționat pentru mine.

29 ian. 2021 06:26:27
Comentarii

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

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

Shiv Babbar Shiv Babbar
31 ian. 2021 09:49:45

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

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

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

Mulțumesc pentru link @shiv.

MiB MiB
21 dec. 2022 17:45:38
1

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

28 dec. 2020 13:52:45
Comentarii

Mulțumesc Francesco, Deja dezactivasem toate extensiile înainte să pun întrebarea aici, din păcate, asta nu a rezolvat problema. Nu folosesc niciuna dintre extensiile menționate.

Loraga Loraga
15 feb. 2021 13:46:13
1

Am descoperit că WP e-Store cauzează:

  1. S-a detectat o sesiune PHP activă
  2. API-ul REST a întâlnit o eroare

WP SpamShield cauzează:

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

13 mar. 2021 05:18:32
Comentarii

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.

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

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.

26 iul. 2021 12:35:59
Comentarii

Mulțumesc @Lee. În cazul meu, această soluție nu a fost suficientă, așa că am conceput propria mea soluție bazată pe a ta. Vezi răspunsul.

MiB MiB
21 dec. 2022 17:36:25
0

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.

21 dec. 2022 17:40:47