[ Pobierz całość w formacie PDF ]
.2, który wykorzystuje zmienne sesji ze skryptu na wydruku 7.1.Wydruk 7.1.Uruchamianie sesji i inicjowanie zmiennychPodstawy sesji: Strona 1Przejście do strony 2Wydruk 7.2.Użycie zmiennych sesji z wydruku 7.1Podstawy sesji: Strona 2Pierwszym krokiem skryptu z wydruku 7.1 jest uruchomienie sesji poprzez wywołanie funkcjisession_start().W domyślnej konfiguracji PHP używa cookie do przechowywania identyfikatora sesji.Funkcjasession_start() posiada te same ograniczenia co funkcje set_cookie() i header().Funkcje te muszą byćwywoływane przed wysłaniem do przeglądarki jakichkolwiek informacji lub musi zostać włączone buforowaniedanych wyjściowych.Chociaż można zmienić sposób przesyłania identyfikatora sesji, najprostszą metodą jestwykorzystanie domyślnego mechanizmu cookie.Pozostałe metody zostaną opisane pózniej.Po rozpoczęciu sesji, zostają zarejestrowane dwie zmienne, aUser oraz aAccount.Gdy użytkownik klikniełącze prowadzące do strony 2, przeglądarka samoczynnie wyśle identyfikator sesji do serwera.W skrypcie zwydruku 7.2 w trakcie wywołania funkcji session_start(), PHP korzysta z identyfikatora sesji do odczytaniawszystkich zmiennych sesji.Na rysunkach 7.2.i 7.3.pokazane są wyniki działania skryptów umieszczonychodpowiednio na wydrukach 1 i 2.Rysunek 7.2.Wynikdziałania skryptu zwydruku 7.1Rysunek 7.3.Wynikdziałania skryptu zwydruku 7.2Możliwe jest wyświetlenie bieżącego identyfikatora sesji wypisując na ekran zawartość zmiennej$PHPSESSID.Dodatkowo, w domyślnej konfiguracji na Apache i Linuksa, dane sesji są przechowywane wkatalogu /tmp w plikach o nazwach w postaci sess_$PHPSESSID.Po uruchomieniu poprzedniego przykładuodszukałem plik sess_e66b342b4e76889f8f25105db11820c6, który zawierał:aUser|s:6:"Cidnie";aAccount|s:4:"1016";.Rozdział 7 Sesje i stan aplikacji82Domyślne ustawienia PHP dotyczące zarządzania sesjami są łatwe do użycia i wystarczają dla większościaplikacji WWW.Jednak w niektórych przypadkach cookie mogą nie być pożądaną metodą przesyłaniaidentyfikatora sesji, a w przypadku niektórych dużych aplikacji WWW użycie plików na serwerze WWW możeutrudniać skalowanie aplikacji.Następne dwie części zawierają omówienie sposobu rozwiązania tych problemów.Przesyłanie identyfikatora sesji bez użycia cookieJeżeli aplikacja absolutnie wymaga zastosowania zmiennych sesji, do przesyłania identyfikatora sesjimożesz użyć innego mechanizmu niż cookie.Należy pamiętać, że niektórzy użytkownicy mają w swoichprzeglądarkach włączoną obsługę cookie.Pierwszą z metod jest ręczne przesyłanie identyfikatora sesji w postacizmiennej GET lub POST.Na wydruku 7.3 pokazany jest skrypt, który pokazuje w jaki sposób należy zmienić kod zwydruku 7.1, aby identyfikator sesji był przesyłany jako zmienna GET.Wydruk 7.3.Ręczne przesyłanie identyfikatora sesji za pomocą metody GETRęczne przesyłanie identyfikatora sesji: Strona 1Przejście do strony 2Należy zauważyć, że kod jest taki sam jak na wydruku 7.1, poza łączem w trzecim wierszu od końca.Wtym przypadku do adresu URL została doklejona stała PHP SID.Stała ta jest zdefiniowana jakoSessionName=SessionID, poniższy kod jest semantycznie identyczny z odpowiednią linią z wydruku 7.3:Przejście do strony 2Należy pamiętać, że SID jest stałą a nie zmienną, więc jeżeli będziesz chciał wydrukować $SID zamiastSID, nie otrzymasz takiego samego wyniku.Na wydruku 7.3 zastosowany został skrót.Zapis taki jestrównoważny z zakładając, że w czasie kompilacji PHP użyto opcji --enable-short-tags.Wydruk 7.3 ilustruje mechanizm ręcznego przesyłania identyfikatora sesji w programie, ale nie pokazujejak mechanizm ten wpływa na tworzenie aplikacji.Korzystając z tego mechanizmu, każde łącze i każdyformularz w aplikacji musi zawierać identyfikator sesji.Jeżeli nie dodasz identyfikatora do jednego łącza, SIDzostanie utracony, a aplikacja będzie zle działać.Na szczęście PHP posiada opcję automatycznegoprzekształcania łączy, który to mechanizm rozwiązuje ten problem za ciebie.Jeżeli chcesz przesyłać identyfikatorsesji przy użyciu metod GET i POST, możesz uaktywnić ten mechanizm kompilując PHP z opcją --enable-trans-sid.Po przebudowaniu PHP kod z wydruku 7.3 może być zmieniony na nieco prostszy, pokazany na wydruku7.4.Wydruk 7.4.Przetwarzanie względnych adresów URL przez PHP w celu przekazywania identyfikatorasesjiAutomatyczne przesyłanie identyfikatora sesji: Page 1Przejście do strony 2PHP Kompendium wiedzy83Różnica pomiędzy wydrukiem 3 i 4 jest taka, że na wydruku 7.4 nie ma odwołania do stałej SID w łączu.Można również zauważyć, że wydruk 7.4 jest praktycznie identyczny z wydrukiem 7.1, ale wynik jego działaniajest różny z powodu zmiany konfiguracji.Gdy użytkownik kliknie łącze, URL będzie zawierał ciągPHPSESSID=xxx, tak samo jak w przypadku skryptu z wydruku 7.3.Kod ten działa, ponieważ PHP szuka na stroniewzględnych adresów URL i dodaje do nich potrzebną wartość identyfikatora sesji.Aby to pokazać, następnyskrypt zawiera kilka względnych łączy i kilka bezwzględnych.Pokazujemy również w jaki sposób PHPprzetworzył łącza.Wydruk 7.5
[ Pobierz całość w formacie PDF ]