Jesteś tutaj: webmade.org >> kursy online >> kurs php >> Część 8
autor: Leszek 'leon' Krupiński, ostatnia modyfikacja: 2007-10-12
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
szukaj: session sesje kurs php
Zagadnienia poruszane w tej części kursu:
© 2004-2008 copyright by webmade.org