Care este cea mai recentă, bună practică și cel mai simplu mod de a utiliza sesiunile în PHP?

Sesiunile din PHP păreau să se fi schimbat de la ultima oară când le-am folosit, așa că caut un mod simplu de a folosi sesiunile dar în același timp să fie relativ sigur și o practică comună bună.

0

7 răspunsuri

Sesiunile au reprezentat o parte esențială a cunoștințelor mele PHP, deoarece mi-a ajutat să-mi rezolv problemele legate de autentificare în momentul în care dezvoltam prima mea aplicație web.

session_start();
if( isset($_POST['username']) && isset($_POST['password']) )
{
    if( auth($_POST['username'], $_POST['password']) )
    {
        //Authentication passed
        $_SESSION['user'] = $_POST['username'];
       //redirect to required page
        header( "Location: index.php" );
    } 
    else 
    {
       //Authentication failed redirect to login
       header( "Location: loginform.html" );
    }
} 
else 
{
      //Username and Password are required
      header( "Location: loginform.html" );
}
0
adăugat

Managementul sesiunii sa schimbat ceva timp în urmă (cred că era în jur de 4,4). Mecanismul vechi încă funcționează, dar este depreciat. Este destul de confuz, așa că vă recomand să nu fiți sigur. Astăzi, folosiți sesiuni accesând variabila globală $ _SESSION (Este o matrice). puteți pune instanțe de obiecte acolo, dar trebuie să încărcați definițiile de clasă pentru acele obiecte înainte de a începe sesiunea de pe pagina următoare. Utilizarea autoload vă poate ajuta aici.

Trebuie să începeți o sesiune înainte de a putea utiliza $ _SESSION. De când începe sesiunea trimite anteturi, nu mai puteți avea nici o ieșire înainte. Aceasta poate fi rezolvată în două moduri: Ori întotdeauna începeți sesiunea la începutul scenariului. Sau tu tampon toate output-ul și trimite-l la sfârșitul scenariul.

O idee bună este regenerarea sesiunii pe fiecare solicitare. acest lucru face uzit mult mai puțin probabil.

Acesta este (ușor) un sfat rău, deoarece poate face site-ul inaccesibil. Ar trebui să regenerați id-ul sesiunii ori de câte ori un utilizator se schimbă privilegiile. În general, aceasta înseamnă că, de fiecare dată când se conectează. Aceasta este pentru a preveni fixarea sesiunii (o formă de sesiune-deturnare). Consultați acest recente thread @ Sitepoint pentru mai multe informații despre subiect.

Utilizarea sesiunilor cookiebased numai este în regulă, dar dacă regenereze sesiune id pe conectare, acesta nu adaugă nici o securitate suplimentară, și scade accesibilitatea un pic.

0
adăugat
Uită-te atent. Regenerați da-ul sesiunii, dar numai atunci când este nevoie. Asta inseamna atunci cand utilizatorul se logheaza.
adăugat autor troelskn, sursa
M-am dus la forumul respectiv și am aruncat o privire. din ceea ce văd că de fapt par să recomande regenerarea id, precum și utilizarea cookie-ului numai în ansamblu.
adăugat autor Laith, sursa
nu toată lumea în firul este de acord cu această poziție
adăugat autor Laith, sursa

Încadrați matricea $ SESSION într-o sesiune() Obiect care vă permite să obțineți variabile din sesiune, obțineți și postați cu un mod similar (dar disociabil), inclusiv filtre de securitate automate, variabile flash (var care sunt folosite odată apoi distruse) și setteri de valoare prestabilită.

Aruncați o privire la comportamentul Simfoniei în acest punct, este foarte util.

0
adăugat

În primul rând, utilizați modulele cookie doar dacă nu aveți un motiv de afaceri foarte specific pentru a nu. Am avut un client care insista pe sesiuni bazate pe url doar pentru un proiect. foarte nesigur și cu o durere de lucru.

O idee bună este regenerarea sesiunii pe fiecare solicitare. acest lucru face deturnarea mult mai puțin probabil. De exemplu.

session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();

Un alt lucru care este o bună practică este dacă faci un fel de autentificare de utilizator ca parte a sistemului, invalidează complet și goliți datele sesiunii pe o logout pentru a vă asigura că utilizatorul este cu adevărat dezactivat din sistem. Am văzut sisteme în care logout-ul este doar realizat prin eliminarea cookie-ului de sesiune.

0
adăugat

În ceea ce privește simplitatea, nu este mai bună decât:

# Start the session manager
session_start(); 

# Set a var
$_SESSION['foo'] = 'whatever';

# Access the var
print $_SESSION['foo'];
0
adăugat

Puteți să stocați sesiuni PHP în baza de date, așa cum este descris în acest   carte. Am folosit această metodă și o găsesc sigură și ușor de implementat, așadar aș recomanda aceasta.

0
adăugat

În timp ce baza de date ar putea fi mai sigură pentru sesiuni, ar trebui să vă concentrați pe ceea ce stocați în sesiune în primul rând - nu ar trebui să conțină altceva decât un ID pentru a identifica utilizatorul (și MAYBE un prim nume sau o variabilă temporară între pagini ).

Aș sugera pur și simplu utilizarea cookie-urilor prestabilite. Sesiunile de baze de date oferă o lovitură suplimentară pe fiecare pagină și chiar dacă nu toate site-urile sunt slashdot, nu există nici un rău în pre-optimizarea ceva la fel de simplu ca acesta.

Pentru utilizare, aș recomanda variabila globală standard:

$_SESSION['yourvar'] = 'somevalue';

Dacă utilizați această metodă în întregul cod, puteți schimba cu ușurință back-end-ul ulterior prin utilizarea session_set_save_handler , care oferă un mod unificat de implementare a backend-urilor sesiunii. Rețineți că puteți utiliza un obiect pentru a conține toate manipularea sesiunilor, dați pur și simplu matrice la fiecare intrare - matrice ("Staticclass", "staticmethod").

Pentru o utilizare mai profundă, aș recomanda să aruncați o privire asupra modului în care sunt tratate sesiunile în KohanaPHP .

0
adăugat
PHP România, Moldova
PHP România, Moldova
173 participanți

Vorbim despre Yii, Laravel, Symphony, MySQL, PgSQL, WP, OpenCart... Pentru confort, opriți notificările. Parteneri: https://ciupacabra.com @js_ro @node_ro @python_ro @seo_ro @Romania_Bot Offtop: @holywars_ro Joburi: @php_job @Grupuri_IT