Często musimy przechowywać więcej informacji w plikach cookies, ale maksymalny limit dla plików cookie wynosi 4 kB, czyli niewiele. Sesje rozwiązują ten problem, ponieważ przechowują dane na serwerze WWW, a w przeglądarce klienta przechowują jedynie krótki identyfikator pozwalający stwierdzić, które dane należą do którego klienta.
Przed przystąpieniem do pracy z sesjami należy je najpierw uruchomić. Odbywa się to przez wywołanie funkcji session_start()
na samym początku skryptu:
session_start();
Silne ostrzeżenie: przed wywołaniem funkcji
session_start()
nie może być wykonywany żaden kod wyjściowy do kodu HTML!
Zawartość sesji jest przechowywana na serwerze, a do przeglądarki klienta wysyłany jest tylko identyfikator, więc użytkownik nie ma możliwości sprawdzenia, co jest przechowywane w sesji. Jedynym sposobem, w jaki skrypt może wpłynąć na użytkownika, jest usunięcie identyfikatora (wówczas skrypt wygeneruje nowy).
Wszystkie sesje są przechowywane w zmiennej superglobalnej $_SESSION
i mogą być przeglądane jako tablica.
Na przykład nazwę aktualnie zalogowanego użytkownika można uzyskać, pisząc:
echo $_SESSION['użytkownik'];
Uwaga: Sesja może nie zawsze istnieć (np. jeśli jesteś nowym użytkownikiem). Dlatego przed wpisaniem na listę należy zawsze sprawdzić, czy istnieje i w razie potrzeby zaproponować alternatywny komunikat o błędzie.
if (isset($_SESSION['użytkownik']) && $_SESSION['użytkownik']) {echo 'Zalogowany użytkownik:' . $_SESSION['użytkownik'];} else {echo 'Nikt nie jest zalogowany.';}
Zapisywanie odbywa się jako zwykłe zapisywanie danych do zmiennej:
$_SESSION['użytkownik'] = 'Honzik';
Serwer WWW zajmie się technicznym zapewnieniem prawidłowego przechowywania danych na serwerze i przesyłania identyfikatora do użytkownika.
Poszczególne wartości można usuwać oddzielnie, zgodnie z kluczem:
unset($_SESSION['użytkownik']);
Można też wybrać wszystkie dostępne sesje:
unset($_SESSION);
Uwaga: Usunięcie określonej sesji nie powoduje opróżnienia wartości klucza, ale powoduje całkowite usunięcie klucza. Dlatego przy próbie odczytania nieistniejącego klucza zostanie wyświetlone ostrzeżenie o błędzie. Zawsze możemy łatwo sprawdzić istnienie klucza za pomocą funkcji
isset()
.
Każda zapisana sesja ma limit czasu, przez jaki będzie przechowywana na serwerze. PHP bezpośrednio zawiera skrypt cron, który okresowo usuwa stare sesje.
Domyślnie jest to zwykle 1440 sekund
, czyli 24 minuty
.
Zwiększanie wartości należy przeprowadzić w dwóch miejscach:
php.ini`` ustawiana jest maksymalna długość ważności, jaką serwer będzie utrzymywał</a>. Wartość ta jest ustawiana przez dyrektywę
session.gc_maxlifetime`,Użycie w PHP:
// serwer będzie teraz utrzymywał sesję przez maksymalnie 3600 sekund = 1 godzinęini_set('session.gc_maxlifetime', '3600');// wszyscy klienci (przeglądarki) będą// sesja wysłana z okresem ważności wynoszącym dokładnie 3600 sekundsession_set_cookie_params(3600);session_start(); // możemy rozpocząć sesję!
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | pl