ZAČÁTKYNÁVODYOOPDOKUMENTACE
Samouczki/
HTTP

Sesje - pliki cookie serwera w PHP

06. 11. 2019

Obsah článku

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.

Rozpoczynanie sesji

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!

Bezpieczeństwo sesji

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).

Pobieranie danych z sesji

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 danych w sesji

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.

Usuwanie sesji

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().

Maksymalna ważność sesji

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:

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 sekund
session_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:

Související články

1.
5.