webmaster webmastering webdesign

Jesteś tutaj: webmade.org >> kursy online >> kurs php >> Część 8

Obsługa sesji (PHP4)

autor: Leszek 'leon' Krupiński, ostatnia modyfikacja: 2007-10-12

szukaj: session session sesje sesje kurs php kurs php

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.

Leszek 'leon' Krupiński

Zagadnienia poruszane w tej części kursu:

Chcesz zostać programistą?

Poznaj 6 kroków do efektywnej
nauki programowania!

 

valid XHTML
valid CSS
© 2004-2008 copyright by webmade.org