PHP - Pastrarea datelor in timpul navigarii de pe o pagina pe alta

Post Title

PHP - Pastrarea datelor in timpul navigarii de pe o pagina pe alta

Pentru a putea pastra date in timpul navigarii de pe o pagina pe alta, PHP ne pune la dispozitie doua solutii:

  1. Mecanismul de sesiuni
  2. Mecanismul cookie

Astazi vom discuta despre prima solutie.Pentru a intelege despre ce este vorba, haide sa vedem un exemplu clar:

index.php

<?php

$username = 'Catalin';

welcome.php

<?php

echo $username;

In fisierul index.php declaram variabila $username si ii atribuim valoarea Catalin.In fisierul welcome.php incercam sa afisam continutul variabilei $username, dar PHP-ul ne atentioneaza cu o eroare.Variabila $username nu a fost declarata in fisierul welcome.php, ceea ce inseamna ca noi vrem sa accesam o variabila care nu a fost definita, drept rezultat, avem o eroare.

Cum putem pastra date atunci cand navigam de pe o pagina pe alta?

Ei bine, folosim mecanismul de sesiuni.Prin adaugarea functiei session_start() dupa primul rand ce urmeaza dupa tagul de deschidere al codului PHP, avem posibilitatea de a stoca si accesa datele din sesiunea curenta in fisierele in care aceasta functie se afla.

index.php

<?php
// pornim mecansimul de sesiun si avem acces la sesiunea curenta
session_start();

welcome.php

<?php
// pornim mecansimul de sesiun si avem acces la sesiunea curent
session_start();

Unde stocam datele ce vrem sa le pastram in timpul navigarii de pe o pagina pe alta?

Dupa ce am pornit mecanismul de sesiuni, avem acces la sesiunea curenta, cu alte cuvinte, PHP-ul ne pune la dispozitie variabila superglobala $_SESSION, variabila ce este o matrice.Datele ce se vor pastrate vor fi stocate in aceasta matrice ca elemente.

index.php

<?php
// pornim mecansimul de sesiun si avem acces la sesiunea curenta
session_start();

// stocam un element in aceasta matrice, element ce are cheia 'username' si valoarea 'Catalin'
$_SESSION['username'] = 'Catalin';

welcome.php

<?php
// pornim mecansimul de sesiun si avem acces la sesiunea curent
session_start();

// folosindu-ne de cheia unui element, putem accesa valoarea dorita
echo $_SESSION['username'];

In primul rand, accesam fisierul index.php astfel incat PHP-ul sa stocheze acele date in sesiunea pornita.Apoi, cand accesam fisierul welcome.php, se afiseaza Catalin, ceea ce inseamna ca avem acces la sesiunea curenta, cu alte cuvinte, avem acces la datele stocate in sesiune.

Cat timp persista aceste date salvate in sesiune?

Ei bine, sesiunea creata persista atata timp cat navigatorul web este deschis, cu alte cuvinte, dupa ce inchideti navigatorul web, datele din sesiune sunt sterse automat.

Putem pastra date chiar si dupa ce navigatorul web a fost inchis?

Da, putem face acest lucru, dar trebuie sa folosim mecanismul cookie, vom discuta si despre acest mecansim intr-un alt tutuorial.

Cum putem verifica daca anumite date exista in sesiunea curenta?

Pentru a face acest lucru, ne folosim de functia isset(), functie ce verifica daca o variabila a fost definita si daca aceasta nu are valoarea null, amintiti-va, fiecare element intr-o matrice, este de asemenea o variabila.

index.php

<?php
// pornim mecansimul de sesiun si avem acces la sesiunea curenta
session_start();

// stocam un element in aceasta matrice, element ce are cheia 'username' si valoarea 'Catalin'
$_SESSION['username'] = 'Catalin';

welcome.php

<?php
// pornim mecansimul de sesiun si avem acces la sesiunea curent
session_start();

// daca aceasta variabila exista si nu are valoarea null
if (isset($_SESSION['username'])) {
    echo $_SESSION['username'];
} else {
   echo 'Welcome here!';
}

Putem sterge sesiunea curenta?

Da, putem "distruge" sesiunea curenta folosind functia session_destroy(), functie ce trebuie adaugata dupa functia session_start(), astfel incat sa avem acces la sesiunea curenta.

Pe langa acele doua fisiere, vom mai crea fisierul logout.php.

logout.php

<?php
// pornim meacanismul de sesiuni si avem acces la sesiunea curenta
session_start();

// stergem sesiunea curenta
session_destroy();

// trimitem utilizatorul in pagina welcome.php
header("Location: welcome.php");
exit;

Daca accesati fisierul logout.php, veti fi redirectionat in fisierul welcome.php, in navigatorul web afisandu-se Welcome here!, ceea ce inseamna ca datele din sesiune au fost sterse.

Putem sterge doar anumite date din sesiunea curenta?

Da, folosind functia unset(), putem elemina un element dintr-o matrice, astfel:

<?php
// pornim mecansimul de sesiuni si avem acces la sesiunea curenta
session_start();

// salvam niste date in sesiunea curenta
$_SESSION['username'] = 'Cata';

// stergem acest element din matricea ce tine toate datele sesiunii curente
unset($_SESSION['username']);

echo $_SESSION['username']; // se afiseaza o eroare 

Daca executam acest cod, se va afisa o eroare, elementul al carei cheie este username a fost sters din matricea $_SESSION.

Exista riscuri in ceea ce priveste securitatea cand folosim acest mecansim de pastrare al datelor?

Da, exista anumite riscuri, de aceea se recomanda mereu folosirea unor metode de protejare.

index.php

<?php
// ne asiguram ca utilizatorul nu poate prelua date despre sesiunea curenta
ini_set('session.cookie_httponly', true);

// pornim mecanismul de sesiuni
session_start();

// regeneram ID-ul sesiunii curente
session_regenerate_id(true);

Acesta fiind un tutorial dedicat incepatorilor, ne oprim aici cu explicatiile, dar, probabil va ganditi ca trebuie sa aveti acest cod in toate fisierele ce folosesc mecansimul de sesiuni, raspunsul fiind, da! Insa, puteti face astfel, creati un fisier de initializare, sa zicem init.php si adaugati codul de mai sus, apoi includeti acest fisier in toate fisierele unde veti folosi mecansimul de sesiuni.

init.php

<?php
// ne asiguram ca utilizatorul nu poate prelua date despre sesiunea curenta
ini_set('session.cookie_httponly', true);

// pornim mecanismul de sesiuni
session_start();

// regeneram ID-ul sesiunii curente
session_regenerate_id(true);

index.php

<?php
require_once 'init.php';

// stocam un element in aceasta matrice, element ce are cheia 'username' si valoarea 'Catalin'
$_SESSION['username'] = 'Catalin';

welcome.php

<?php
require_once 'init.php';

// daca aceasta variabila exista si nu are valoarea null
if (isset($_SESSION['username'])) {
    echo $_SESSION['username'];
} else {
   echo 'Welcome here!';
}

logout.php

<?php
require_once 'init.php';

// stergem sesiunea curenta
session_destroy();

// trimitem utilizatorul in pagina welcome.php
header("Location: welcome.php");
exit;

Puteti folosi un astfel de fisier de intializare pentru a initializa componentele aplicatiei create, de asemenea, in acest fisier puteti include alte fisiere precum fisierul ce contine conexiunea cu baza de date, fisierul cu functii s.a.m.d.

Eroarea... "headers already sent..."

Probabil veti intalni aceasta eroare si nu veti stii cum sa o rezolvati.Ei bine, aceasta eroare apare cand inainte de a porni sistemul de sesiuni, voi afisati ceva in navigatorul web, de exemplu:

<?php

echo "Haaaaa...";

session_start();

Functia session_start() trebuie folosita inainte de a afisa ceva, chiar si inainte codului HTML!

<h1>Haaa</h1>

<?php
session_start();
?>

Acest lucru se intampla datorita modului in care functioneaza protocolul HTTP, acesta fiind folosit in fiecare moment cand navigati pe internet.

Puteti folosi acest mecansim de sesiuni pentru a preveni accesarea unor pagini daca utilizatorul nu este autentificat. Cu alte cuvinte, utilizatorul va putea accesa aceste pagini protejate doar daca s-a autentificat. In procesul de autentificare, daca datele utilizatorului se potrivesc cu cele din baza de date, salvati o sesiune pentru a stii ca el s-a autentificat si verificati daca aceasta sesiune exista in toate paginile "protejate".

Autor articol
David: Why do you want to leave me? Why? I'm sorry I'm not real! If you let me, I'll be so real for you!

Comentarii

Comentariu adaugat de marian
Bravo inca o data Catalin! 
go to page top marian | 2016-11-09

  • 1
Trebuie sa fii logat sa poti lasa un comentariu Autentificare Inregistrare Logare cu Facebook
top