Utilizarea de sesiuni PHP

1. Despre sesiuni, crearea unei sesiuni PHP

Sesiunea reprezinta o modalitate prin care PHP retine informatii de la o pagina la alta.
Odata cu initializarea unei sesiuni, utilizatorul poate pastra anumite variabile chiar daca in continuare viziteaza si alte pagini ale site-ului. In principiu informatia se pastreaza pana la inchiderea browser-ului, sau pana cand utilizatorul distruge in mod intentionat sesiunea curenta.
Lucrurile se desfasoara ca in felul urmator: in momentul cand un user s-a logat la site, PHP atribuie acestuia un identificator unic de sesiune : SID. Acest SID este inglobat intr-un coockie cu numele PHPSESSID si trimis apoi catre browserul utilizatorului. Daca browserul nu suporta cookie-uri sau acestea sunt dezactivate, atunci acest SID este adaugat la adresa URL. In acelasi timp se creeaza pe server un fisier cu numele SID. In continuare daca utilizatorul doreste sa stocheze anumite informatii, acestea vor fi practic scrise in acest fisier SID de pe server.
Sesiunile au urmatoarele avantaje:

Initializarea unei sesiuni se face cu functia : Aceasta trebuie sa fie printre primele linii de cod dintr-un script PHP, deoarece apelul acestei functii trebuie facut inainte de trimiterii catre browser-ul Web a vreunui cod HTML sau chiar a unui spatiu vid.
Daca folosim stocarea iesirii in buffer, instructiunea session_start() nu trebuie inserata neaparat la inceputul codului.
Instructiunea session_start() nu este necesare daca in fisierul de configurare "php.ini", variabila "session.auto_start" are valoarea TRUE.
Pentru a intelege mai bine modul de lucru cu sesiuni si functia session_start(), folosim un exemplu in care avem o pagina principala "a.php" unde cream o variabila cu numele "userName", atribuindu-i valoarea "MarPlo", pe care o stocam intr-o sesiune PHP, pagina contine o legatura catre o alta pagina "b.php", aceasta din urma va folosi functia session_start() pentru a prelua, prin sesiune, valoarea variabilei "user_name" din pagina "a.php", astfel putem folosi valoarea acestei variabile intr-un script din pagina "b.php".
Continutul fisierului "a.php" este urmatorul:
<?php
//Fisierul a.php

session_start();
    if(!isset($_SESSION['userName']))
        $_SESSION['userName'] = "MarPlo";
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
Aceasta este pagina "a.php"
<?php
echo "<br />Variabila de sesiune are valoarea: ". $_SESSION['userName'];
?>
<br />Legatura <a href="b.php">spre pagina b.php</a>
</body>
</html>
Continutul fisierului "b.php" este urmatorul:
<?php

//Fisierul b.php

session_start();
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Pagina b.php</title>
</head>
<body>
Aceasta este pagina b.php

<?php
echo "<br />Variabila de sesiune are valoarea: ". $_SESSION['userName'];
?>

</body>
</html>
Observati ca atribuirea, respectiv citirea variabilelor se face folosind variabila super-globala : _SESSION.
Deschizand prima pagina, "a.php", va fi afisat urmatorul rezultat
Aceasta este pagina "a.php"
Variabila de sesiune are valoarea: MarPlo
Legatura spre pagina b.php
Cand apasam click pe link-ul "spre pagina b.php", se va deschide aceasta pagina, afisand urmatorul continut:
Aceasta este pagina "b.php"
Variabila de sesiune are valoarea: MarPlo
- In acest exemplu se observa ca pagina "b.php" detine informatii despre variabila de sesiune creata in pagina "a.php".

2. Manipularea variabilelor sesiunii.

In anumite momente ar putea fi util sa aflam identificatorul sesiunii curente. Pentru aceasta folosim functia session_id(), ca in exemplul urmator:

<?php
echo "<br /> Identificatorul sesiunii curente SID este:". session_id();

//Va afisa un rezultat asemanator cu: "Identificatorul sesiunii curente SID este:2846240682abf24a09f42664fc03bbf3"
?>
Functia session_id() accepta un parametru. Astfel putem seta un anumit SID pentru sesiunea curenta. In acest caz trebuie sa apelam functia session_id() inainte de functia : session_start(), ca in exemplul urmator:
<?php
session_id('123abc');
session_start();
echo "<br /> Identificatorul sesiunii curente SID = ". session_id();

//Va afisa rezultatul: "Identificatorul sesiunii curente SID = 123abc"
?>
Deoarece variabilele de sesiune pot fi citite de alti utilizatori neautorizati, nu este indicat sa pastram aici informatii esentiale cum sint parolele.
Pentru a creea un minimum de securitate putem codifica aceste informatii, folosind functtile de codare oferite de PHP: - Functia md5(sir_de_caractere) codifica sirul de caractere furnizat ca parametru si returneaza un sir de 32 charactere hexazecimale. Aceasta functie foloseste algoritmul de criptare: "RSA Data Security, Inc. MD5 Message-Digest Algorithm".
Iata un exemplu de utilizare al acestei codificari:
<?php
$user = "MarPlo";
$codificat = md5($user);
echo "<br /> user codificat = $codificat";

// Va afisa: "user codificat = 0a460e3d95526f05a0064154ad94a378"
?>
Consideram cazul in care avem o variabila de sesiune "$parola" care pastreaza o parola si dorim sa codificam si sa transmitem acrasta variabila astfel incat utilizatorii neautorizati sa nu o poata folosi. Pentru aceasta folosim functia md5(), pentru a o cripta. Mai mult initializam o variabila globala cu numele "$secret", careia ii atribuim ca valoare un sir de caractere oarecare. In continuare, inainte de a introduce parola intr-o sesiune PHP, concatenam valorile "$secret" si "$parola" si criptam rezultatul. Astfel, chiar daca cineva reuseste sa decripteze variabila de sesiune, este putin probabil sa poata separa sirul "$secret" creat de noi.
Este bine sa pastram acest fisier intr-un director pretejat, cum ar fi cu un nivel mai sus decat directorul pentru pagini de Web.

Iata cum se prezinta exemplul prezentat mai sus. (consideram o variabila "$passtest" care verifica daca valoarea acesteia este egala cu parola):
<?php
$secret = 'abcgfd43599oopjhfdxcaqq30pmnvcx';
$parola = 'mypass';
$cod = md5($secret. $parola);
session_start();
$_SESSION['parola'] = $cod;

// Consideram variabila "$passtest" pentru a testa daca valoarea acesteia este egala cu parola
if (md5($secret. $passtest) == $_SESSION['parola'])
    echo "Parola acceptata";
else
    echo "Parola nu este valida";
?>
Astfel, daca valoarea variabilei "$passtest", care poate fi obtinuta de exemplu dintr-un formular HTML, este identica cu parola pastrata de noi, va fi afisat mesajul "Parola acceptata".

3. Stergerea unei sesiuni

Pentru a putea sterge o sesiune este necesar sa incepem scriptul PHP cu instructiunea: session_start(), ca intotdeauna cand folosim sesiuni.
Pentru a sterge toate variabilele memorate in matricea $_SESSION folosim:

Pentru a sterge doar o variabila memorata in sesiune folosim : Datele sesiunii sunt memorate in server in fisiere temporare. Pentru a sterge datele sesiunii din server folositi: Iata un exemplu care ilustreaza aceasta procedura:
<?php
// Initializeaza datele sesiunii
session_start();
// Sterge tabloul $_SESSION
unset($_SESSION);
// Sterge datele de sesiune din server
session_destroy();
echo "<br /> Sesiunea curenta a fost inchisa";
?>
Utilizare cataloage - Directoare <<-- Anterior --- Urmator -->> Optiuni pentru utilizarea caracterelor ...

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce atribut e folosit in tag-ul <a> pentru adresa link-ului?
src href rel
<a href="http://coursesweb.net/" title="CoursesWeb.net">CoursesWeb.net</a>
Ce proprietate CSS seteaza tipul fontului utilizat?
font-family text-decoration font-size
h2 {
  font-family:"Calibri", sans-serif;
}
Ce instructiune selecteaza toate tag-urile <div> cu class="cls"?
querySelector("div.cls") getElementsByTagName("div") querySelectorAll("div.cls")
var elm_list = document.querySelectorAll("div.cls");
var nr_elms = elm_list.length;       // numar elemente selectate
alert(nr_elms);
Indicati functia care returneaza suma valorilor dintr-un array.
array_sum() array_diff() array_shift()
$arr = array(1, 2, 3, 4);
$arr_sum = array_sum($arr);
echo $arr_sum;       // 10
Indicati forma corecta a verbului "study" (a studia) la Trecutul Simplu in aceasta propozitie: "We (study) English."
studyed studys studied
We studied English.
- Noi am studiat engleza.
Indicati forma corecta a verbului "decir" (a spune) la Prezent in aceasta propozitie: "Yo (decir) siempre la verdad."
digas digo decir
Yo digo siempre la verdad.
- Eu spun mereu adevarul.
Utilizare sesiuni - Tutoriale PHP