PHP – obsługa sesji.

article-thumbnail

Tematem tego wpisu są sesja. Nie chodzi jednak o wielogodzinne granie ze znajomymi, czy zaliczanie kilku(nastu) egzaminów na studiach. Sesje w kontekście aplikacji internetowych to pewien pakiet danych. Ów dane są przypisane do danego klienta. Dzięki temu możemy przechowywać pewien stan aplikacji. Częstym wykorzystaniem sesji jest użycie ich do przechowywania informacji czy użytkownik jest zalogowany.

Wstęp.

W PHP sesje przechowywane są w globalnej tablicy o nazwie $_SESSION. Indeksem tej tablicy jest ciąg znaków określający nazwę danego parametru. Zanim jednak odwołamy się do danej wartości, musimy sprawdzić czy dana sesja jest ustawiona. W takim razie, najpierw musimy włączyć ją serwerze. Używamy do tego polecenia:

session_start();

Teraz ustawmy przykładową sesję. Zmienną nazwijmy np. komunikat. Będzie ona przechowywać łańcuch „<h1>Hello World</hi>”.Jak wspomniałem wcześniej do danej informacji w sesji dobieramy się używając indeksy słownego. W omawianym przykładzie kod wyglądałby tak.

Operacje na sesji

$_SESSION['przykładowa'] = "<h1>Hello World</hi>"

Następną ważną rzeczą, jaką musimy umieć obsługiwać jest sprawdzanie, czy sesja jest ustawiona. Jako że PHP przechowuje sesję w zmiennej typu tablica. Dlatego wystarczy, że sprawdzimy, czy dany ustawiono dany fragment tablicy . Aby sprawdzić czy zmienna istnieje używamy funkcji isset(), która jako argument przyjmie sprawdzaną zmienną. Zapis wygląda tak:

isset($_SESSION['przykład']);

Funkcja isset zwraca prawdę lub fałsz. W związku z tym możemy użyć jej w instrukcji warunkowej. Dzięki temu możemy obsłużyć różne scenariusze. Załóżmy że piszemy skrypt logowania. Gdy wprowadzimy już logikę odpowiedzialną za połączenie z bazą danych, ustawiamy sesję, w której zamieszczamy informację, że udało się zalogować. Jeżeli chcemy nie dopuścić do tego by ktoś niezalogowany wszedł na daną kartę, umieszczamy instrukcję warunkowaną, która sprawdza czy czy ustawiono sesję. Jeśli nie przekierowuje na na stronę logowania, a jeśli tak, to wyświetla stronę. Kod mógłby wyglądać np. tak:

if(isset($_SESSION['zalogowano']))
{
	header('Localtion: /index');
}
else
{
	header('Location: /logowanie');
}

Co się stanie gdy użytkownik chce się wylogować. Powinniśmy wówczas usunąć daną zmienną sesji. Możemy do tego użyć funkcji unset(); Podobnie jak isset() przyjmuje ona argument w postaci zmiennej. Podana zmienna zostanie usunięta. Dzięki temu wyczyścimy naszą sesję. Kod usuwający dany element sesji wygląda tak.

unset($_SESSION['przykład']);