Rozdział 8. Obsługa sesji
Mechanizm sesji był najważniejszą ze zmian oczekiwanych w PHP 4.
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 8.1.
Zliczanie ile dana osoba odczytała daną stronę z czasie jednej
sesji.
<?php 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.