Obsługa sesji (PHP4)Mechanizm sesji był najważniejszą ze zmian oczekiwanych w PHP4. Umożliwia on przekazywanie parametrów między stronami w łatwy sposób. Zmienne są przechowywane po stronie serwera a u klienta trzymane jest tylko ID sesji. Te ID jest zapisane w cookie lub przekazywane przez URL. PHP jest w stanie sam rozpoznać czy na komputerze klienta włączony jest mechanizm cookies i w razie potrzeby dodać identyfikator sesji do każdego URLu i formularza. Wymaga to jednak posiadania PHP skompilowanego z opcją --enable-trans-sid. Jako że sesje mogą bazować na ciasteczkach, także i w tym przypadku przed rozpoczęciem sesji do przeglądarki nie mogą być wysłane żadne inne dane. Po otrzymaniu żądania klienta PHP automatycznie (jeśli w konfiguracji PHP włączona została opcja auto_start) lub "ręcznie" przez programistę (za pomocą funkcji session_start()) sprawdza, czy przypisano już ID sesji. Jeśli tak, to PHP odczytuje zmienne zarejestrowane w tej sesji. Jeśli nie, generowany jest nowy, unikalny identyfikator sesji. Aby PHP zaczęło śledzić wartość zmiennej, najpierw trzeba ją zarejestrować za pomocą funkcji session_register( nazwa_zmiennej ). Istnieje też odwrotna wersja tej funkcji - funkcja session_unregister( nazwa_zmiennej ) powoduje, że PHP "zapomni" o tej zmiennej. W PHP 4.1.0 wprowadzone zostały opisane wcześniej zmienne superglobalne. Jedna z tych zmiennych, $_SESSION, przechowuje zmienne zarejestrowane w sesji. Kluczem tej tablicy jest oczywiście nazwa zarejestrowanej zmiennej. Tablica ta ma jednak pewną różnicę w stosunku do innych tablic superglobalnych. Mianowicie można jej użyć do rejestrowania zmiennych sesyjnych. Wystarczy przypisać wartość odpowiedniemu kluczowi tej tablicy aby zmienna została zarejestrowana. Przykład: zliczanie ile dana osoba odczytała daną stronę z czasie jednej sesji. <?
session_start(); /* można pominąć jeśli jest się pewnym że włączona jest opcja auto_start */
if (!isset($_SESSION['count'])) { // jeśli zmienna nie jest zarejestrowana $_SESSION['count'] = 0; // przypisz jej początkową wartość } else { // jeśli jest zarejestrowana $_SESSION['count']++; // zwiększ jej wartość }
echo 'Strona odczytana '.$_SESSION['count'].' razy w ciągu tej sesji';
?> Skrypt z tego przykładu będzie pamiętał ilość odwiedzin przez cały czas działania przeglądarki, jeśli w przeglądarce włączony jest mechanizm cookies, lub dopóki strona odświeżana jest z takim samym numerem sesji przekazanym przez URL. Użycie sesji rodzi pewne wątpliwości: co jeśli ktoś 'ukradnie' numer sesji? W ten sposób uzyska dostęp do danych zapisanych w tej sesji. Mimo że istnieje taka teoretyczna możliwość, to ilość dostępnych identyfikatorów sesji jest tak duża, że taka 'kradzież' byłaby całkiem przypadkowa.
|