|
Obsługa
sesji (PHP4) |
|
|
|
|
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.
|
|
|
|