Menu
Jest wolny
Zameldować się
główny  /  Edukacja / Gdzie przechowywane są sesje PHP. Sesje PHP pod skalpelem

Gdzie przechowywane są sesje PHP. Sesje PHP pod skalpelem

W Internecie można znaleźć tysiące samouczków na temat tego, co sesje są za to, czego potrzebują i jak z nimi pracować. Ale niestety, po ich przeczytaniu wiele pytań pozostaje. Moim zdaniem najprostszy sposób na zrozumienie tego we wszystkim, aby zobaczyć, jak działa sesje od wewnątrz. Te. Sprawdź dzienniki udostępniania przeglądarki i serwera WWW, a także zobacz, jakie dane są zapisywane po stronie klienta i po stronie serwera.

Potem wiele chwil staje się znacznie wyraźniejszy, a sam mechanizm jest bardziej przejrzysty.

Sesje będą badane w następnym skrypcie standardowym:

Działa w następujący sposób:

Blok 1. Funkcja session_start () tworzy nową sesję lub ładuje stare, przy użyciu unikalnego identyfikatora sesji fSESID.

Blok 2. Jeśli udało ci się przywrócić sesję, wartość $ _Session ["Widoki"] wzrasta przez jednego. Jeśli nie, jest inicjowany przez jednego.

W teorii, jeśli w przeglądarce jest włączona obsługa gotowania, mechanizm musi pracować, a za każdym razem, gdy strona jest aktualizowana, wartość licznika wzrośnie przez jeden.

Pierwszy skrypt ładowania

Żądanie nagłówków

Get / HTTP / 1.1 Host: FiRingrange.Local User-Agent: Mozilla / 5.0 (Windows NT 5.1; RV: 6.0.2) Gecko / 20100101 Firefox / 6.0.2 Akceptacja: Tekst / HTML, Aplikacja / XHTML + XML, Aplikacja / XML; q \u003d 0,9, * / *; q \u003d 0,8 Akceptować-Język: RU-PL, RU; q \u003d 0,8, EN-US; Q \u003d 0,5, PL; Q \u003d 0,3 Akceptowanie kodowania: GZIP, Deflacja Akceptuj : Windows-1251, UTF-8; q \u003d 0,7, *; q \u003d 0.7 Połączenie: Keep-Alive Cache-Control: Max-Age \u003d 0

Odpowiedź nagłówki

HTTP / 1.1 200 OK Data: Czw, 29 wrz 2011 20:36:15 GMT Serwer: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-by: PHP / 5.2.10 Set-Cookie: Phpssid \u003d K33EN6CCGIA7125MITJ5TE4U6; ścieżka \u003d / Wygasa: Czw, 19 listopada 1981 08:52:00 GMT Cache-Control: No-Store, No-Cache, Must-Revalidate, Post-Check \u003d 0, Pre-Check \u003d 0 Pragma: No-Cache Content Długość: 58 Utrzymuj: limit czasu \u003d 5, max \u003d 100 Połączenie: Keep-Alive Content-Type: Tekst / HTML

Komentarz

W pierwszym wniosku przeglądarka nie zidentyfikowała się w żaden sposób, więc mechanizm sesje PHP. Wygenerowałem nowy unikalny identyfikator sesji i nakazał przeglądarkę, aby utworzyć wiązkę, w której ten identyfikator zostanie zapisany.

Side Server.

W wyniku skryptu po stronie serwera powstaje SESS_K33EN6CCGIA7125MITJ5TE4U6 z poniższych treści:

Strona klienta

Po stronie klienta powstaje Phpsessid Cook, w którym przechowywana jest wartość unikalnego identyfikatora sesji.

Uwaga. Dla ustawienia PHP. Domyślnie żywotność gotowania phpssid - aż przeglądarka zostanie zamknięta. Te. Gdy tylko przeglądarka zostanie zamknięta, gotowanie zostanie usunięte, a sesja zostanie odpowiednio utracona. Życie Phpsesid Cookie można zmienić, zmieniając wartość session.cookie_lifetime.

Wynik pracy skryptu

Skrypt drugiego ładowania

Żądanie nagłówków

Get / HTTP / 1.1 Host: Firingrange.local User-Agent: Mozilla / 5.0 (Windows NT 5.1; RV: 6.0.2) Gecko / 20100101 Firefox / 6.0.2 Akceptuj: Tekst / HTML, Zastosowanie / XHTML + XML, Zastosowanie / XML; q \u003d 0,9, * / *; q \u003d 0,8 Akceptuj język: RU-EN, RU; Q \u003d 0,8, EN-US; Q \u003d 0,5, PL; q \u003d 0,3 Akceptuj kodowanie: Gzip, Deflatuj Akceptuj-Charset: Windows-1251, UTF-8; Q \u003d 0,7, *; q \u003d 0,7 Połączenie: Phps-Alive Cookie: Phpsesid \u003d K33EN6CCCGIA7125MITJ5TE4U6 Cache-Control: Max-Age \u003d 0

Odpowiedź nagłówki

HTTP / 1.1 200 OK Data: Czw, 29 wrz 2011 20:49:41 Serwer GMT: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-by: PHP / 5.2.10 Wygasa: Czw, 19 listopada 1981 08:52:00 GMT Cache-Control: No-Store, No-Cache, Must-Revalidate, Post-Check \u003d 0, Pre-Check \u003d 0 Pragma: No-Cache Content Długość: 58 Keep-Alve: Timeout \u003d 5, Max \u003d 100 Połączenie: Test-Alive Content-Type: Tekst / HTML

Komentarz

Przeglądarka wysyła serwer internetowy Phpsesid Cook za pomocą PHP inicjuje tablicę $ _Session z wartościami z pliku SESS_K33EN6CCGIA7125MITJ5TE4U6. Odpowiednio, w bloku 2 działa, jeśli (prosta) oddział.

Side Server.

W wyniku operacji skryptu, zawartość pliku SESS_K33EN6CCCIA7125MITJ5TE4U6 jest zmiana:

Strona klienta

Klient nie zmienia się na kliencie.

Wynik pracy skryptu

Co dalej?

Późniejsze pliki do pobrania strony przed zamknięciem przeglądarki będzie działać przez analogię z tym, jak działało drugie ładowanie skryptu.

Dlatego Life Cook's Life był ograniczony do bieżącej sesji przeglądarki, a następnie po zamknięciu unikalny identyfikator sesji zostanie utracony i podczas ponownego uruchomienia procesu pójdzie na nowy.

Jednak można powrócić do zapisanej sesji, jeśli wyraźnie określiłeś PHSESSID jako parametr skryptu:

Wróć do sesji jest dość warunkowa, ponieważ W wyniku operacji skryptu w tym przypadku Cook nie jest tworzony. Nagłówki odpowiedzi serwera:

HTTP / 1.1 200 OK Data: Czw, 29 wrz 2011 21:01:52 Serwer GMT: Apache / 2.2.13 (Win32) PHP / 5.2.10 Powered-przez: PHP / 5.2.10 Wygasa: Czw, 19 listopada 1981 08:52:00 GMT Cache-Control: No-Store, No-Cache, Must-Revalidate, Post-Check \u003d 0, Pre-Check \u003d 0 Pragma: No-Cache Content Długość: 58 Keep-Alve: Timeout \u003d 5, Max \u003d 100 Połączenie: Test-Alive Content-Type: Tekst / HTML

Te. Aby utrzymać pracę, z tej sesji do wszystkich powiązań należy przypisać? Phpsesid \u003d K33EN6CCGIA7125MITJ5TE4U6.

Uwaga. Możesz określić PHP, aby unikalny identyfikator sesji jest przesyłany tylko przez kucharza. Aby to zrobić, zainstalować session.use_only_cookies w wartości 1. W tym przypadku sztuczka, wykazana powyżej, nie przejdzie.

Jeśli pliki cookie są wyłączone w przeglądarce, możesz przesłać identyfikator sesji przez parametry, jak zrobiliśmy powyżej. Ponadto w PHP jest mechanizm, który zwiększy żądany parametr do łącza i dodać ukryte pola do formularza. Zasada działania jest dokładnie taka sama jak w przypadku plików cookie, więc nie będziemy zdemontować tej sprawy oddzielnie.

Mały kwestionariusz (FAQ)

Gdzie są dane sesji są fizycznie przechowywane?

Dane sesji są przechowywane na serwerze. Domyślnie są one rejestrowane w plikach, ale można określić własny mechanizm przechowywania danych sesji (na przykład za pomocą bazy danych). Jeśli chcesz, zobacz funkcję session_set_save_handler.

Kto generuje unikalny identyfikator sesji?

Unikalny identyfikator sesji (Phpsesid) generuje serwer.

Czy można napisać własny mechanizm sesji?

Tak, jest całkiem możliwe. Jak widać, PHP nie używa niczego supernatural - identyfikator jest zapisywany między żądaniami z kucharzem, dane sesji są przechowywane w plikach na serwerze.

Na przykład, własny mechanizm pracy z sesjami jest w popularnym ramowym Codeignal.

Jak bezpieczny jest mechanizm sesji?

Sesja jest identyfikowana tylko przy pomocy unikalnego identyfikatora sesji, więc w ogólnym przypadku atakujący wystarczy, aby go ukraść, aby pomylić serwer. Weź skrypt testowy, który użyliśmy powyżej. Jeśli odwołanie jest z innego adresu IP (w odniesieniu do utworzonej sesji), ale fSESID będzie przesyłany tak samo, wówczas sesja zostanie pomyślnie przywrócona, a licznik wzrośnie z poprzedniej zapisanej wartości.

Zapewnienie dodatkowej ochrony będzie dla Ciebie. Na przykład:

  • Możesz zapisać w danych sesji IP i klienta użytkownika (będą przechowywane po stronie serwera), a następnie przy każdym uchwycie konieczne jest weryfikację, czy wartości bieżące są zbiegły się z zapisanym. W tym przypadku musisz szukać kompromisu między bezpieczeństwem a wygodą użytkownika.

    Na przykład, jeśli użytkownik ma dynamiczny IP i korzystasz z sesji, aby utrzymać autoryzację, ale jednocześnie sprawdzić nawigację OD, a następnie z każdą zmianą adresu użytkownik będzie musiał ponownie wprowadzić nazwę użytkownika i hasło.

    Podobnie ciąg agenta użytkownika może się zmieniać podczas aktualizacji wersji przeglądarki lub podczas instalacji niektórych wtyczek.

  • Jednym z zalecanych mechanizmów ochrony sesji jest ponowne wygenerowanie identyfikatora za każdym razem, gdy odwołania skryptów (patrz funkcja session_regenerate_id). Wyświetl skrypt i algorytm pracy w sekcji może być poniżej.

    Uwaga.Jeśli wierzysz na dyskusję na oficjalnej stronie internetowej, a następnie podczas ponownego wygenerowania identyfikatora, problemy mogą pojawić się z równoległym dostępem do danych.

Sesje robocze z identyfikatorem ponownego wygenerowania w kontekście

Scenariusz


// blok 1.
session_start ();
gdyby.(iset.($ _Session ["zainicjowany"]))
session_regenerate_id ();
jESZCZE.
$ _Session ["iniciated"] \u003d prawdziwe.;

// blok 2.
gdyby.(iset.($ _Session ["Widoki"]))
$ _SESSION ["Widoki"] ++;
jESZCZE.
$ _SESSION ["Widoki"] \u003d 1;

// Blok 3.
echo."
< body>
Liczba poglądów: ". $ _Session [" Widoki "]."

" ;

?>

Jak już wiadomo, protokół HTTP umożliwia aplikacjom internetowym zainstalowanie "sesji" - dialog między klientem a serwerem, a status tego dialogu jest zapisywany z żądania na żądanie.

Język PHP, jest w głównym języku do programowania stron internetowych, zapewnia możliwość korzystania z mechanizmu sesji HTTP, biorąc większość obaw podczas organizowania i przechowywania tych sesji. Przypomnę ci, że konieczne jest pracowanie dla mechanizmu sesji HTTP:

  • Serwer musi wygenerować unikalny numer sesji.
  • Numer sesji musi zostać przeniesiony do klienta (zwykle poprzez pliki cookie).
  • Serwer powinien być w stanie zapisać dane sesji w plikach lub w bazie danych, dzięki czemu można je przywrócić, znając numer sesji, który klient wysyła serwer podczas kolejnych żądań (także przez cookies).

Właściwie, jedynym działaniem, które należy podjąć w programie PHP, dzięki czemu przekładnie mechanizmu sesji skręcił, mają zadzwonić do jednej jedynej funkcji: session_start (). Ta funkcja tworzy wszystkie niezbędne działania:

  • Sprawdza, czy klient nie wysłał numeru już istniejącej sesji w pliku cookie lub w parametrach żądania. Jeśli klient wysłał numer sesji, dane tej sesji są ładowane z lokalizacji stałej pamięci (na przykład pliku) do pamięci, a program staje się dostępny przez tablicę $ _Session. Jeśli klient nie wysłał numeru sesji lub takiej sesji nie istnieje na serwerze - nowa sesja jest tworzona z nowym numerem, a jego dane są również dostępne za pośrednictwem tablicy $ _Session, która w przypadku nowej sesji będzie pusty. Liczba nowo utworzonej sesji jest umieszczona w nagłówku odpowiedzi SET-COOKIE Server.
  • Zapewnia zapisując dane sesji. Po przetworzeniu programu PHP, stan obecny Tablica $ _Session jest przechowywana w miejscu stałej pamięci, która ponownie będzie dostępna na następnej prośbie klienta.

Teraz, znając szczegóły, które są ukryte na session_start (), możemy grać z tym mechanizmem. Poniższy przykład przechowuje jeden numer w sesji, który wzrasta po drugim z każdym żądaniem klienta:

Po pierwszym wejściu na tę stronę serwer wyśle \u200b\u200bprzeglądarkę wiązki z numerem sesyjnym:

Set-cookie.: PSYSSID \u003d 4FTVCA7JMMNM04Q95R3SDSK6R6; ścieżka \u003d /

A ta sama przeglądarka numerów sesji zostanie odesłana do serwera przy każdym kolejnym żądaniu. Teraz, jeśli czyszisz pliki cookie w przeglądarce, na serwerze zostanie utworzona nowa sesja, a konto w naszym skrypcie testowym rozpocznie się ponownie.

Bardziej prawdziwy przykład: login użytkownika

Najczęściej sesje są używane, gdy używany jest login użytkownika. Przy wejściu do witryny użytkownik wprowadza login i hasło, które sprawdzają serwer. Jeśli logowanie jest poprawne, serwer musi zapamiętać dane użytkownika w sesji, aby nie poprosić o więcej logowania hasłem. W najprostszym przypadku ten przykład będzie:

Array ("Hasło" \u003d\u003e "123", "Tytuł" \u003d\u003e "Admin",), "Użytkownik" \u003d\u003e Array ("Hasło" \u003d\u003e "QWE", "tytuł" \u003d\u003e "Użytkownik"),) ; Return Isset ($ Użytkownicy [$ Login]? $ Użytkownicy [$ Login]: NULL; ) Funkcja GetCurrenduser () ($ user \u003d isset ($ _ Session ["Użytkownik"])? \u003d $ użytkownik;)?\u003e

Cześć,!
Link1 Reference2.

Wychodzić Nie odwiedziłeś witryny. Wprowadź login i hasło:
Zaloguj sie: Hasło:

Ten program żąda logowania i hasła, a można zalogować się za pomocą logowania użytkownik., qWE. lub administrator., 123 . Współpracowany użytkownik pokazuje powitanie. Komunikat wyświetla komunikat, jeśli nazwa użytkownika lub hasło są nieprawidłowe.

Gdy tylko można udać się do tej "witryny", możesz jechać przez linki (Link1, reference2), pozostając zalogowanym użytkownikiem.

Jakie dane mogą być przechowywane w sesjach?

Przez domyślny PHP. Przechowuje dane sesji w tymczasowym pliku jako tekst. W tym możesz upewnić się do katalogu za pomocą tymczasowego pliki PHP.. Ten katalog jest określony w PHPINFO () w środowisku, temp. W tym katalogu znajdziesz pliki specyfikacji 4FTVCA7JMMNM04Q95R3SDSK6R6.Gdzie 4FTVCA7JMMNM04Q95R3SDSK6R6 to numer sesji wysłany do pliku cookie. Spójrz na ten plik: Jeśli uruchomiłeś pierwszy powyższy przykład, plik zostanie wykryty przez w przybliżeniu zawartość: "Wartość | I: 2;". Ten tekst jest serializowaną prezentacją zawartości sesji, gdzie tylko jedna zmienna jest przechowywana z liczbą.

Wszystkie wartości, które PHP umieszcza w sesji za pomocą tablicy $ _Session, podczas zapisywania sesji, skręć w gatunek tekstowy, a następnie nagrany w pliku. Proces konwersji zmiennych w tekście nazywa się "serializacją". Tak więc, w sesji, wszelkie dane, które PHP mogą być umieszczone serializowanie.

Na szczęście w PHP serializuj nie tylko proste wartości Wydaje się, że liczba i linie, ale także złożone struktury, takie jak tablice i obiekty:

"; Print_r ($ _ sesja); echo""$ _Session [" testarray "] \u003d tablica (1, 2, 3," jeden "," dwa "," trzy "," dziecko "\u003d\u003e tablica (5, 6, 7),); $ obj \u003d nowy stdclass (); $ Obj-\u003e x \u003d 1234; $ obj-\u003e y \u003d 4567; $ _Session ["testobject"] \u003d $ obj;

Ten przykład zapisuje takie dane do pliku sesji:

Testardray | A: 7: (I: 0; I: 1; I: 1; I: 2; I: 2; I: 3; I: 3; S: 3: "One"; I: 4; S: 3 : "Dwa"; I: 5; S: 5: "Trzy"; S: 5: "Dziecko"; A: 3: (I: 0; I: 5; I: 1; I: 6; I: 2; I: 7;)) TestObject | O: 8: "StdClass": 2: (s: 1: "x"; I: 1234; S: 1: "Y"; I: 4567;)

Przechowywanie obiektów w sesji

W sesji, jak widać, możesz przechowywać obiekty. Jednak w tym samym czasie należy pamiętać, że utrzymywanie obiektów sesji, które odnoszą się w jakikolwiek sposób na "domowe" klasy lub obiekty wystąpienia Twoich klas, konieczne jest, aby reklamy tych klas zostało wykonane do session_start ( ) połączenie. Oznacza to, że PHP powinien znać klasę, zanim przychodzi na wzmiankę o tym, gdy deserializowanie danych sesji.

Gdy obiekty są zapisywane, istnieją sytuacje, w których standardowa serializacja obiektu z jakiegoś powodu jest niedopuszczalna lub nie jest możliwa. W takich przypadkach możliwe jest wdrożenie serializacji ręcznie poprzez deklarowanie metod "Magic" __Sleep () i __Wakeup () w klasie.

tak poza tym, Serializacja jest możliwa do wdrożenia i "ręcznego" i nie ma potrzeby zapisywania / pobierania danych sesji. Może być potrzebny, gdy niektóre dane w aplikacji muszą zostać zapisane do użycia później lub przeniesienia przez sieć. Funkcje, które mogą być przydatne, gdy Serializuj / Deserialization - Serializuj (), Unvialize (), JSON_ENCODE (), JSON_DECODE ().

Co nie można przechowywać w sesji?

W sesji niemożliwe jest przechowywanie tego, czego nie można serializować. Przykładem takiego podmiotu może służyć dowolnym zasobem PHP. Zasoby to połączenia sieciowe, otwarte deskryptory plików, połączenia bazy danych i inne obiekty. Zasób PHP jest odniesieniem do obiektu wewnętrznego w głębokościach PHP, który nie jest dostępny bezpośrednio z programu, ale z którym możesz pracować, powodując różne funkcje PHP. Rodzaj "czarnej skrzynki", której zawartość nie może i nie powinna serializować.

Dodatkowe funkcje

PHP zapewnia programistę z możliwością realizacji własnej metody przechowywania danych sesji, na przykład w bazie danych. Aby to zrobić, musisz zaimplementować funkcje, które będą zapisywać i pobierać dane sesji ze stałej lokalizacji przechowywania. Następnie funkcje te muszą być zaangażowane w PHP, dzwoniąc do funkcji session_set_save_handler.

Aby przyspieszyć proces oszczędzania i pobierania danych sesji na wysoce załadowanych witrynach, serwer MEMCACACHED może być używany, który przechowuje dane w pamięci. Obsługa tej metody przechowywania sesji jest wbudowana w PHP i skonfigurowana przez plik konfiguracyjny php.ini.

Można ustawić nazwę parametru cookie, przez który numer sesji jest przekazywany, wskazując jego nazwę, żywotność, domenę i inne parametry.

Te i wiele innych opcji konfiguracji sesji HTTP w PHP są dostępne za pośrednictwem funkcji session_ *.

Sesje w PHP lub jako dane o użytkowniku, który przybył do witryny lub kupującego są zapisywane podczas przemieszczania między stronami witryn bez większej trudności. Lekcja jest bardzo ważna. Istotne tworzenie 95% witryn.

Co to jest sesja w PHP

Sesje służą do przechowywania informacji o tymczasowych (na przykład, że użytkownik wprowadził stronę) podczas przemieszczania się między stronami jednego miejsca. Podczas korzystania z sesji dane są przechowywane w plikach tymczasowych na serwerze.
Najczęściej, sesje (i cookies, zbyt) również wykorzystują podczas tworzenia sklepów internetowych, forów, tablic ogłoszeń, sieci społecznościowych, blogów i innych zasobów. Wygoda systemu sesji jest zachowanie tymczasowych informacji o zamkniętym użytkowniku / kupującym, dane, na którym znajduje się w szybkim dostępu do określonego czasu. Sesja ma naturalną trwałość - aż do zamknięcia przeglądarki. Jeśli zamkniesz tylko stronę, a następnie otwierasz witrynę, dane użytkownika / klienta nadal będą dostępne.

Logika sesji

Sesja (lub sesja) to rodzaj tymczasowego przechowywania danych. Natychmiast ostrzegaj cię, jest warta niewielkiej ilości danych. Na przykład login i hasło użytkownika ustawiania lub numer seryjny w bazie danych.

Przykład pracy
1. Użytkownik wprowadza login i hasło i przychodzi do witryny
2. Dane z loginem i hasłem są zapisywane w sesji jednej ze stron strony:

Plik index.php.

Session_start (); // Każdy plik, w którym chcesz korzystać z tych sesji, należy na początku kodu zawierają polecenie "Start session"

$ login \u003d "admin";
$ hasło \u003d "pass";
$ _SESSION ["Login"] \u003d $ Login; // Zapisz zmienną zawierającą login
$ _SESSION ["Hasło"] \u003d $ Hasło; // Zapisz zmienne zawierające hasło

3. Po przejściu do innej strony witryny, dane te będą również dostępne:

Plik example.php. (lub jakakolwiek inna strona)

Echo "Twój login". Sesja $ _ ["Login"]; // wyjdzie "swój login admin", chociaż na tej stronie nie zapisaliśmy danych!
Zobacz, wszystko jest proste!

4. Jeśli chcesz usunąć dane sesji, wystarczy:

Plik example.php.

Session_start (); // ponownie uruchom sesję ponownie

Nieznacznie (sesja $ _ ["login"]); // tak niezarejestrowany zmienną lub "zniszczoną"
Echo "Twój login". Sesja $ _ ["Login"]; // wyjdzie "swój login". Ponieważ zniszczyliśmy go w ostatniej linii, nie ma danych

Session_destroy (); // Zniszcz sesję. Wszystkie dane, w tym $ _Session ["Hasło"] już nie. Kiedy zapytamy, wyświetli błąd
Ogólnie rzecz biorąc, ta transmisja jest podobna do metody postu, ale tylko nie powinnaś napisać dużo nadmiaru kodu, ale wszystkie dane przesyłane z strony na stronie są przechowywane w tymczasowych plikach na serwerze. Powtarzam sesje, które muszą zawierać małe ilości danych, więc są one odpowiednie do przechowywania logowania / hasła, kosza kupującego i innych małych woluminów.

Wartości transferu lub tablicę za pomocą sesji PHP

W sesji możesz nagrywać nie tylko ciąg, ale także szereg danych. Po prostu nie przesadzaj z objętością tablicy, ponieważ wszystko wpłynie na czczo i przestrzeń na serwerze.

Ponownie używamy strony startowej index.php.

Session_start ();

$ r \u003d array ("jeden", "dwa", "trzy");

$ _Session ["Arr"] \u003d $ r;

Na stronie, w której zostanie wyświetlone wszystko
Zapisz dane w sesjach i przejdź przez link do innej strony, gdzie wszystkie dane będą wysyłane.

Odbiorca plików, strona test.php. Gdzie otwieramy tablicę

Session_start ();
Print_r (sesja $ _ ["ARR"]);
// Usuń
/*
Szyk.
\u003d\u003e Jeden.
\u003d\u003e Dwa.
\u003d\u003e Trzy.
*/
?>
Możesz odświeżyć lekcję w pamięci. Ogólnie rzecz biorąc, wszystko powinno być jasne.

Inne funkcje do pracy z sesjami

session_unregister (ciąg) - sesja zapomina o wartości danej zmiennej globalnej;
session_destroy () - sesja została zniszczona (na przykład, jeśli użytkownik opuścił system, naciskając przycisk wyjściowy);
session_set_cookie_params (int Liftime [, ścieżka string [, domena strunowa]]) - Dzięki tej funkcji można zainstalować, jak długo żyje sesja, ustawiając UNIX_TIMESTAMP, który określa czas śmierci sesji.

Lista funkcji do pracy z sesjami (sesja) w PHP
session_cache_expire - zwraca koniec bieżącej akcji pamięci podręcznej
Session_cache_limiter - dostaje i / lub ustawia limiter Cashel Cashet
Session_commit - alias session_write_close ()
Session_decode - Dekoduje dane sesji z linii
session_destroy - niszczy wszystkie dane zarejestrowane na sesję
session_ence - szyfruje dane bieżącej sesji jako ciąg
session_get_cookie_params - dostaje sesję ustawień gotowania
session_id - pobiera i / lub ustawia aktualny identyfikator sesji
session_is_registered - określa, czy zmienna jest zarejestrowana w sesji
session_module_name - pobiera i / lub ustawia bieżący moduł sesji
session_name - dostaje i / lub ustawia nazwę bieżącej sesji
session_regenerate_id - modyfikuje aktualny identyfikator sesji ostatnio generowany
Session_register - rejestruje jedną lub więcej zmiennych dla bieżącej sesji.
session_save_path - dostaje i / lub ustawia ścieżkę zapisywania bieżącej sesji
session_set_cookie_params - Ustawia parametry sesji Cook
Session_set_save_handler - Ustawia funkcje przechowywania sesji poziomu użytkownika
Session_start - inicjalizuje dane sesji
Session_unregister - relacje zmiennej z bieżącej sesji
Session_unset - uwalnia wszystkie zmienne sesja
Session_write_close - pisze dane sesji i sesja końcowa

Przykłady sesji

Licznik widoku strony podczas sesji. Przykład wite. Jednak po zamknięciu przeglądarki odliczanie rozpocznie się ponownie.

Niektóre strony odwiedza licznik jako część jednej sesji

// Prosty przykład korzystania z sesji bez plików cookie.
session_name ("test");
session_start ();
$ _SESSION ["Liczba"] \u003d @ $ _ sesja ["Liczba"] + 1;
?>

Licznik


W bieżącej sesji pracy z przeglądarką otworzyłeś tę stronę.
Raz (a).
Zamknij przeglądarkę, aby zresetować ten licznik.
Kliknij tutaj, aby zaktualizować stronę!
W każdym przejściu, licznik wzrośnie o 1)

Dziękuję za uwagę! Powodzenia w wysiłkach!

Sesje w PHP to mechanizm zapisywania na stronie serwera informacji komputera klienta. W rzeczywistości sesja w PHP nie jest takim trudnym tematem, ale ze względu na jej zrozumienie, musisz znać zasadę roboczych plików cookie w PHP. Jeśli więc nie wiesz, jak działa cookie w PHP, najpierw przeczytasz odpowiedni artykuł, a następnie wróć tutaj.

Sesja słów z języka angielskiego jest tłumaczona jako sesja, więc poczucie sesji w PHP staje się bardziej zrozumiałe, ale termin "sesja", i użyjemy go w tym artykule.

Sesje w PHP są bardzo podobne do pliku cookie, te same pary to klucz \u003d\u003e Wartość, są one przechowywane po stronie serwera.

Session_start ()

Sesja musimy rozpocząć, dla tego istnieje funkcja session_start (). Ta funkcja rozpoczyna sesję lub sesję, w której możesz go nazwać.

Funkcja session_start () jest pożądana, aby zadzwonić na samym początku strony, ale w moich przykładach tego nie robię.

Array $ _Session.

Sesje są grupami zmiennych przechowywanych na serwerze, ale należą do jednego unikalnego gościa. Powtarzam, jest to kluczowy punkt: sesje są przechowywane na serwerze.

W celu zapewnienia interakcji każdego gościa z jego danymi z jego sesji jest stosowany plik cookie., stworzenie, którego PHP daje się sam, nie musisz się o to martwić. Ten plik cookie ma znaczenie tylko dla serwera i nie można go użyć do uzyskania danych użytkownika.

Na serwerze dane sesji są przechowywane w plik tekstowy I są dostępne w programie PHP w tablicy $ _SESSION. Aby zachować zmienną w sesji, musisz przypisać wartość w tej tablicy.

Wreszcie zacznijmy za pomocą przykładów. Wszystko jest bardzo proste.

Sesje w PHP. wartość. ";

Teraz spróbuj uzyskać wartość z tablicy $ _Session w innym przykładzie.

Sesje w PHP.

Uwaga, jeśli w drugim przykładzie usuwamy funkcję session_start (), a następnie nie będziemy mieć dostępu do danych tablicy $ _SESSION.

Session_id ()

Po utworzeniu sesji automatycznie uzyskasz dostęp do unikalnego identyfikatora sesji za pomocą funkcji session_id (). Ta funkcja umożliwia określenie i odbieranie wartości identyfikatora sesji.

Sesje w PHP.

Możesz spojrzeć na pasek narzędzi dla programistów przeglądarki (w Chrome, aby to zrobić, naciśnij Ctrl + Shift + I, a następnie Zasoby i znajdzie plik cookie), ta domena umieściła przeglądarkę do plików cookie z nazwą fSESID i w przybliżeniu takiej wartości: "7G5DF9RKD1HHVR33LQ1K6C72P7".

Zgodnie z wartością phpsesid, która zdefiniuje przeglądarkę i współpracę z odpowiednim zestawem zmiennych, które będą dostępne do skryptu przez tablicę $ _Session, jak już wcześniej zapisuje.

Session_name () Funkcja

Jeśli funkcje session_id () pozwala uzyskać wartość identyfikatora sesji, funkcja session_name () umożliwia znalezienie nazwy sesji.

Sesje w PHP.

Po raz kolejny o funkcji session_start ()

Teraz wiemy więcej o proZhanizm sesji w PHP i musisz ponownie powrócić do funkcji session_start (). Ta funkcja inicjuje mechanizm sesji dla bieżącego użytkownika. Jak dokładnie się dzieje:

  • Jeśli użytkownik uruchomił witrynę po raz pierwszy, session_start () ustawia plik cookie od klienta i tworzy tymczasowe przechowywanie na serwerze powiązanym z identyfikatorem użytkownika.
  • Określa repozytorium związane z przesyłanym identyfikatorem prądu.
  • Jeśli w serwerze znajdują się dane, są one umieszczane w tablicy $ _SESSION.
  • Jeśli Rejestracja_globali z pliku php.ini jest włączony, wszystkie elementy tablicy $ _Session są przekształcane w zmienne globalne.

Przykład korzystania z sesji

Teraz przyjrzymy się przykładem, który umożliwi drobne eksperymenty ze sesjami.

Sesje w PHP.

Licznik

W bieżącej sesji otworzyłeś stronę czas.

Otwórz przykład w "\u003e Ta karta.

Cała praca sesji opiera się na tablicy $ _Session, jest wyraźnie widoczne w tym przykładzie.

Jeśli zamkniesz okno przeglądarki, sesja zatrzyma się, nasz miernik zostanie zresetowany. To zachowanie sesji w PHP można zmienić, wrócimy do tego problemu trochę dalej w artykule.

Zakończenie sesji

Aby ukończyć sesję, potrzebujemy:

  1. Wyczyść tablicę $ _Session.
  2. Usuń tymczasowe przechowywanie na serwerze.
  3. Usuń plik cookie sesji.

Clear Massive $ _Session może używać funkcji session_unset ().

Funkcja session_destroy () usuwa tymczasowe przechowywanie na serwerze. Nawiasem mówiąc, nie robi nic więcej.

Musisz usunąć plik cookie sesji za pomocą funkcji SetCookie (), które studiowaliśmy w studiu z plikiem cookie w PHP.

Przykład zakończenia sesji:

Zakończenie sesji

Sesja została zakończona.

Teraz możesz przeprowadzić eksperyment: Uruchom przykład z miernikiem w jednym oknie, wiatr licznika, a następnie uruchomić przykład z usunięciem sesji i odnowić stronę z miernikiem.

Usuń plik cookie można wykonać w ten sposób:

setcookie (nazwa_session (), "", czas () - 60 * 60 * 24 * 32, "/")

Po raz kolejny o funkcji nazwy session_name () i session_id

Funkcje session_name () i session_id () są rzadkie w praktyce, ale piszę o nich, ponieważ artykuł musi zostać ujawniony przez mechanizm działania sesji w PHP.

Korzystając z tych funkcji, możesz określić własne nazwy i identyfikatory sesji, ale nie zaleca się tego zrobić. Jeśli chcesz je ustawić, napisz te funkcje z argumentami przed funkcją session_start (), jak w poniższym przykładzie:

Sesje w PHP.

Podczas korzystania z tego przykładu wszyscy użytkownicy otrzymają ten sam identyfikator sesji.

Zatrzymamy więcej szczegółów, jeśli rozpoczniesz przykład z sekcji o funkcji Session_name () (tutaj jest link) w różnych przeglądarkach (na przykład w Chrome i Internet Explorer), w każdej przeglądarce będzie miał własną, unikalną sesję identyfikator. Przeglądarki przechowują pliki cookie każdy w swoim folderze, więc funkcja session_start () da każdej przeglądarce do utworzenia własnego, unikalnego identyfikatora, a odpowiednio, dla każdej przeglądarki zostanie utworzona unikalne przechowywanie na serwerze. Dlatego przykład z miernikiem (to) w każdej przeglądarce będzie działać niezależnie od siebie.

Jeśli określisz ten sam identyfikator sesji dla wszystkich użytkowników, będą działać z jednym repozytorium na serwerze. Oto przykład licznika, który rozważy wizyty z różnych przeglądarek:

100) (session_unset (); session_destroy ();)?\u003e Sesje w PHP.

Licznik numer 2.

Otworzył stronę w różnych przeglądarkach czas.

Otwórz przykład w "\u003e Ta karta.

Jeśli uruchomisz ten przykład, nie jest to fakt, że zobaczysz tam jednostkę. Inni użytkownicy mogą już zmienić wartości w pamięci sesji na serwerze. W tym przypadku serwer usuwa repozytorium - nie wiem, więc gdy miernik zostanie przekroczony, wartość 100 zakończy sesję.

Ustawianie czasu oczekiwania

Domyślnie sesja "żyje", dopóki gość zamyka okno przeglądarki. Wynika to z faktu, że funkcja session_start () leży z klientem taki plik cookie.

Życie sesji można zmienić za pomocą funkcji session_set_cookie_params (), oto jej składnia.

session_set_cookie_params (int Lifetime [, ścieżka strunowa [, domena strunowa [, bool Secure]]))

W praktyce wystarczy używać tylko pierwszego parametru (żywotności), zapisu w ciągu kilku sekund, co określa, ile serwer musi zapamiętać status sesji po zamknięciu przeglądarki.

Funkcja session_set_cookie_params () jest stosowana tylko dla okresu skryptu.

Oto przykład korzystania z tej funkcji:

Sesje w PHP.

Licznik numer 3.

Wartość licznika:.

Otwórz miernik w "\u003e Ta karta.

Przykręć licznik i zamknij przeglądarkę, po 30 sukund ponownie otwórz ten przykład. Twoja sesja będzie kontynuowana.