W skrypcie PHP po wywołaniu session_start() zapisano $_SESSION['login'] = 'anna';. Gdzie domyślnie przechowywana jest wartość anna?
$_GET.PHPSESSID.Dane sesji PHP przechowuje serwer, domyślnie w pliku w katalogu tymczasowym wskazanym przez ustawienie session.save_path. Przeglądarka dostaje jedynie identyfikator sesji, zwykle w ciasteczku o nazwie PHPSESSID. Przy kolejnym żądaniu odsyła ten identyfikator, a session_start() odczytuje na jego podstawie zapisane dane do tablicy $_SESSION.
Dlatego w sesji trzyma się informacje, których użytkownik nie powinien móc zmienić, na przykład to, że jest zalogowany i jako kto. Wartość w ciasteczku można podejrzeć i zmodyfikować w narzędziach przeglądarki, a wartości w $_SESSION nie. Sesję kończy session_destroy().
Dzięki temu użytkownik pozostaje zalogowany, przechodząc między podstronami serwisu.
Najczęściej myli się tu sesję z ciasteczkiem, bo oba mechanizmy służą do zapamiętania czegoś między podstronami. Ciasteczko jednak w całości leży w przeglądarce i trafia do skryptu przez $_COOKIE. W przypadku sesji przeglądarka trzyma tylko losowy identyfikator, a wartość anna nigdy do niej nie trafia.
Przekazywanie danych w adresie URL to mechanizm parametrów $_GET, widocznych w pasku adresu. Dawniej PHP potrafił dopisywać do adresu sam identyfikator sesji, ale nigdy zapisanych w niej wartości.
PHP nie tworzy też samodzielnie tabel w MySQL. Zapis sesji w bazie wymaga napisania własnej obsługi, np. przez session_set_save_handler(). Domyślnie dane sesji leżą w plikach na serwerze.
Zasadę warto zapamiętać tak: ciasteczko to dane po stronie przeglądarki, a sesja to dane po stronie serwera, połączone z przeglądarką tylko identyfikatorem.