[Powered by Google Translate] [PHP Sessions]
[Tommy MacWilliam, Harvard University]
[To jest CS50.] [CS50.TV]
Sesje w PHP mogą być wykorzystywane do realizacji funkcji,
jak loginów użytkowników, w aplikacji internetowej.
Sesje PHP pozwalają skojarzyć informacji
z całej sesji przeglądania użytkownika
a nie tylko jednej strony.
To znaczy, jak użytkownik odwiedza różne strony PHP, które tworzą swoją stronę,
wszelkie informacje w tej sesji będą się utrzymywać.
To znaczy, że dane przechowywane w sesji po jednej stronie
później może być udostępniony przez inną stronę.
Przechowywanie informacji w sesji jest łatwe,
i robimy to za pomocą znaku dolara, podkreślenia, zmiennej sesji kapitału.
Znak dolara, podkreślenia, SESJA-jak znak dolara, podkreślenia, GET
i znak dolara, podkreślenia, POST-
jest tablicą asocjacyjną składającą się z par wartości kluczowych.
Tak więc możemy użyć składni-jak znak dolara, podkreślenia, sesja,
Uchwyt, cytuję, bla, cytuję, wspornik, równa, cytuję, bar, cytat-
do przechowywania wartości "bar" w kluczu "foo".
Jednak zanim będziemy mogli napisać lub odczytać z tablicy sesji,
musimy wywołać specjalną funkcję-
Sesja, podkreślają, start () -
a to zainicjować sesję.
Warto więc spojrzeć na przykład.
Naszym pierwszym strony, hello.php wykorzystuje sesji do wyjścia jakieś dane do użytkownika.
Pamiętaj, że musimy użyć session_start przed możemy uzyskać dostępu do żadnych danych sesji.
Teraz używamy isset PHP w celu ustalenia, czy istnieje klucz
w tablicy asocjacyjnej $ _SESSION.
Jeśli ten klucz istnieje, co oznacza, że ​​użytkownik zalogował się,
więc będziemy wyświetlać nazwę użytkownika.
Jeśli ten klucz nie jest ustawiony, oznacza to, że użytkownik nie jest zalogowany jeszcze,
więc będziemy wyświetlać link do login.php.
Warto więc spojrzeć na login.php.
Tu mamy jednego formularza HTML z jednym wejściem.
Atrybut action formularza jest $ _SERVER ['PHP_SELF'],
a to oznacza, że ​​chcemy formularz należy złożyć do bieżącego pliku,
, która w tym przypadku jest login.php.
Więc wróćmy do początku tej sprawy.
Jeśli użytkownik przedłożył formularz, a następnie $ _POST ['nazwa'] musi być ustawiona.
Aby uzyskać więcej informacji na temat formularzy HTML i postu,
zobacz film Web Development PHP.
W przypadku, że użytkownik zrobił wysłać formularz,
chcielibyśmy dodać, że wartość wpisaną w na sesji.
Teraz możemy przekierować użytkownika do hello.php.
Ponieważ mamy zapisane wejścia użytkownika do sesji,
hello.php będzie mógł przejść do wartości, która została ustawiona w login.php.
Warto więc sprawdzić to w przeglądarce internetowej.
Po pierwsze, będziemy poruszać się http://localhost/hello.php.
Widzimy tutaj, że nie zalogowany jeszcze,
więc niech to kliknij w link login, który odsyła nas do login.php.
Dobrze, wpisz swoje nazwisko, które będą następnie przechowywane w sesji.
Świetne! Teraz możemy zobaczyć moje wejście od login.php na hello.php poprzez sesji.
Więc, co o zalogowaniu się użytkownika z?
Cóż, w celu zalogowania użytkownika w, po prostu przechowywana wartość do nazwy sesji.
Więc do logowania użytkownika na zewnątrz, po prostu trzeba usunąć tego klucza
z tablicy sesji.
Warto więc przyjrzeć się tej ostatniej sprawy, logout.php.
Po raz kolejny musimy wywołać session_start ()
zanim cokolwiek zrobimy sesję związaną.
Teraz możemy po prostu zadzwonić session_destroy (),
który zadba o pozbycie się wszystkich danych w sesji
a następnie przekierować użytkownika z powrotem do hello.php.
Więc jeśli kliknij Wyloguj się łącza,
widzimy, że serwer nie zapomniał, kim jestem,
a ja już nie jestem zalogowany
Więc co tu się dzieje pod maską?
W celu uzyskania zachowanie po prostu widział,
Nasz serwer musi zrobić 2 rzeczy.
Po pierwsze, serwer musi w jakiś sposób przechowywania danych w sesji.
Różne pliki PHP, które zawierają strony internetowej
wykonywane są jako osobne wywołania interpretera PHP
zmienna lokalna nie może więc być dzielone między nimi.
Zamiast tego, serwer musi przechowywać nasze dane sesji
w pewnym miejscu, że wiele. php może przejść.
Po drugie, serwer musi kojarzyć dane sesji tylko z mojej sesji.
Podczas logowania do Facebooka,
prawdopodobnie istnieją miliony innych ludzi również zalogowany na Facebooku w tym samym czasie.
Ale serwer musi w jakiś sposób obcowania moich danych
z mojej bieżącej sesji i danych z cudzego innej sesji.
Na szczęście, autorzy PHP myślałem o tym wszystkim dla nas,
więc nie trzeba realizować wszelkie tego sami.
Ale rzućmy okiem na to, co robi w PHP domyślnie.
Gdy odwiedzam stronę PHP zawierający session_start po raz pierwszy,
PHP będzie generować dużą wartość losową.
Aż session_destroy nazywa-czy nie odwiedzić wszystkie strony PHP na tym miejscu na chwilę-
że wartość losowa i prawdopodobnie unikatowy będą związane z mną.
W ten sposób serwer ma jakiś sposób identyfikacji moją sesję przeglądania
w przeciwieństwie do kogoś innego.
Możemy przyjrzeć się aktualnej sesji ID
za pomocą funkcji PHP, session_id.
Tutaj mamy po prostu wyprowadzania wartość naszego identyfikatora sesji.
Jeśli więc jeszcze raz zalogować się na przykład aplikacji internetowej,
i teraz przejdź do sessid.php,
zobaczymy ten długi ciąg znaków,
i to jest mój aktualny identyfikator sesji,
i tak serwer jest śledzenie, kim jestem.
Ok, ale mamy rozwiązany tylko połowa problemu.
Pewnie, że serwer ma teraz jakiś sposób identyfikacji mnie,
ale kiedy odwiedzić inną stronę, serwer musi ponownie użyć tego samego identyfikatora
zamiast generować nowe.
Pamiętaj, jeśli zadeklarować zmienną lokalną w foo.php
a następnie odwiedzić bar.php,
bar.php nie ma możliwości dowiedzenia się, co się stało w foo.php.
Więc realizacja sesji domyślnie php wymaga przeglądarki przypomnieć serwer
ID sesji, który w użyciu.
Jest to realizowane w postaci cookie.
Cookie-oprócz tego, że smaczne, snack-
jest po prostu mały plik tekstowy na komputerze
że serwer może zapisywać za pomocą przeglądarki internetowej.
Więc po PHP generuje mój unikalny identyfikator sesji poprzez session_start,
to będzie powiedzieć przeglądarka do przechowywania tego identyfikatora w lokalnym pliku tekstowym lub pliku cookie.
Następnie przeglądarka będzie zawierać ten identyfikator w każdym wniosku
że pozwala na serwerze.
Tak naprawdę, serwer WWW nie pamięta, kim jestem.
Zamiast tego przeglądarka jest po prostu pamiętać, niepowtarzalny identyfikator
, który został wygenerowany przez PHP, a następnie stale przypominając serwer
co to identyfikator jest.
W ten sposób informacje jak moja nazwa użytkownika jest przechowywany na nie serwer mojej przeglądarce.
Przeglądarka po prostu informuje serwer, gdzie te informacje przechowywane w PHP
tak PHP może go odzyskać.
Tak, że nasuwa się pytanie, gdzie jest PHP rzeczywiście przechowywania tych informacji?
Domyślnie PHP będzie przechowywać dane sesji
w pliku wewnątrz z / tmp lub w folderze "Temp".
Nazwa tego pliku będzie zawierać identyfikator sesji PHP można określić tak
który plik do odczytu i zapisu z urządzeń tylko ID sesji.
Dobrze. Warto więc otworzyć zakładkę Network debugger Chrome
przez ikonę klucza w prawym górnym rogu.
Teraz możemy udać się ponownie hello.php.
Załóżmy, kliknij na żądanie HTTP do hello.php
a następnie kliknij na nagłówki.
Tutaj widzimy, że nagłówek Cookie zawiera klucz o nazwie PHPSESSID,
lub sesji PHP ID-o wartości, która jest w tym samym długi ciąg widzieliśmy
kiedy odwiedziliśmy sessid.php.
To jest dokładnie tak, jak przeglądarka jest przypominanie, co serwer ID sesji powinny być używane.
Jest w tym to w nagłówku HTTP.
Dobrze. Wracajmy do terminala.
Załóżmy, przejdź do katalogu / tmp, gdzie PHP jest przechowywanie informacji sesji domyślnie.
Rzeczywiście, wewnątrz tego folderu tymczasowego,
oto plik, który zawiera dokładnie taki sam identyfikator sesji.
Jeśli otworzymy ten plik, możemy zobaczyć, jak PHP reprezentuje moją sesję na dysku.
Oto ciąg "Tommy" jest przechowywany klucz "nazwa"
który jest dokładnie to, czego się spodziewaliśmy.
I to jest przegląd sesji w PHP.
Co właśnie zobaczył tylko domyślna implementacja sesji.
W rzeczywistości, wiele stron internetowych, zmienić to domyślne zachowanie
wydajniej przechowywać sesje PHP
w celu poprawy wydajności.
Nazywam się Tommy, i to jest CS50.
[CS50.TV]