[PHP] Jak między stronami przesłać zmienne korzystając z sesji?
Chcesz przekazywać między stronami zmienne wykorzystując mechanizm sesji.
Jeżeli chcesz, aby użytkownik mógł korzystać z wcześniej zainicjalizowanych zmiennych (np. listy zamówionych w sklepie towarów lub loginu i hasła), możesz wykorzystać mechanizm sesji, który jest wygodniejszy niż przesyłanie tych samych zmiennych tylko przez cookies lub tylko jako parametr adresu URL.
Choć sesje bardzo przypominają obsługę cookies i parametry w zmiennych, są w rzeczywistości bardziej rozbudowanym, niezależnym mechanizmem przeznaczonym do przesyłania informacji między stronami w obrębie jednej sesji. Sesje korzystają z cookies i/lub parametrów w adresach URL (gdy cookies nie są włączone), ale wszystko odbywa się automatycznie, bez ingerencji programisty przy minimalnym użyciu kodu.
Jest to bardzo wygodne i proste rozwiązanie, bo nie musisz martwić się o samodzielne przesyłanie zmiennych przypisanych do użytkownika w adresach WWW lub cookies. Tym zajmuje się PHP i np. w razie potrzeby sam dołącza parametr do odnośnika, wyręczając Cię w tworzeniu skomplikowanych linków gdy nie działają cookies.
Użycie sesji jest banalnie proste. Stwórzmy dwie strony i prześlijmy między nimi kilka zmiennych. Na stronie index.php umieść poniższy skrypt:
<?
session_start();
$_SESSION["imie"]="Jan";
$_SESSION["nazwisko"]="Kowalski";
$_SESSION["wiek"]=30;
?>
<a href="strona2.php">kolejna strona</a>
Każda strona, która będzie odwiedzona w ramach jednej sesji, czyli jednego połączenia i przechodzenia między stronami musi zaczynać się od zainicjowania mechanimu sesji za pomocą session_start(). Jeżeli nie chcesz umieszczać w każdej stronie tego polecenia, umieść w pliku php.ini w zmiennej session.auto_start wartość 1.
Do dyspozycji masz tablicę globalną ze zmiennymi $_SESSION, do której możesz "wkładać" różne wartości i przypisane im zmienne. W ten sposób dodaję imię, nazwisko i wiek, które mogłem pobrać np. z bazy danych lub formularza.
Teraz przechodząc do nowej strony, dalej chcę z nich korzystać. A więc na stronie strona2.php odczytuję je i wypisuję na ekranie:
<?
session_start();
echo "imię: ".$_SESSION["imie"];
echo "<br>nazwisko: ".$_SESSION["nazwisko"];
echo "<br>wiek: ".$_SESSION["wiek"];
?>
Pobieram je z tablicy $_SESSION, gdzie zostały wcześniej zapisane.
Łatwe, prawda? Dane, które zapisane zostały do tablicy, w rzeczywistości znajdują się w specjalnym pliku tekstowym na serwerze. Ścieżkę do miejsca na serwerze gdzie umieszczane są pliki sesji dla każdego użytkownika możesz zadeklarować w zmiennej session.save_path, też w pliku php.ini.
Plik z sesją (dla mojej sesji) nazywa się: sess_d9438c5ee47318c996c1ec44df3a6533 (każda sesja ma inny identyfikator) i zawiera następującą treść:
imie|s:3:"Jan";nazwisko|s:8:"Kowalski";wiek|i:30;
Informacja o pliku, w którym znajdują się dane sesji (a więc nasze parametry), przesyłana jest przez mechanizm ciasteczek (cookies), a jeżeli ciasteczka są wyłączone, PHP automatycznie dodaje identyfikator pliku do adresu URL (tylko ustaw w tym celu session.use_trans_sid na 1), np.:
strona2.php?PHPSESSID=d9438c5ee47318c996c1ec44df3a6533
W ten sposób cały czas, pomiędzy stronami, po których się poruszam, przesyłany jest identyfikator aktualnej sesji, gdzie mogą być zapisane moje ustawienia, hasła, lista zakupów czy inne informacje, z których użytkownik korzysta chodząc po stronie WWW.