Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 fuentesjr
fuentesjr

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

4 2008-09-18T20:18:39+00:00 7
Programare
session
php
Comentarii la întrebare (0)
Laith
18 septembrie 2008 в 8:27
2008-09-18T20:27:30+00:00
Mai mult
Sursă
Editează
#96544

Î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
0
Comentarii (0)
dittonamed
18 septembrie 2008 в 8:32
2008-09-18T20:32:16+00:00
Mai mult
Sursă
Editează
#96592

Î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
0
Comentarii (0)
Oko
18 septembrie 2008 в 8:33
2008-09-18T20:33:22+00:00
Mai mult
Sursă
Editează
#96612

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
0
Comentarii (0)
troelskn
18 septembrie 2008 в 8:39
2008-09-18T20:39:06+00:00
Mai mult
Sursă
Editează
#96686

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
0
Comentarii (0)
Christian P.
18 septembrie 2008 в 8:40
2008-09-18T20:40:35+00:00
Mai mult
Sursă
Editează
#96709

Î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
0
Comentarii (0)
e-satis
18 septembrie 2008 в 8:40
2008-09-18T20:40:46+00:00
Mai mult
Sursă
Editează
#96711

Î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
0
Comentarii (0)
Grant Gubatan
11 septembrie 2017 в 11:59
2017-09-11T11:59:35+00:00
Mai mult
Sursă
Editează
#46155253

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
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
RU
© Answer-ID 2021
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire