Sesja PHP i pliki cookie PHP z przykładem
⚡ Inteligentne podsumowanie
Pliki cookie i sesje w PHP zachowują stan w bezstanowym protokole HTTP, ale przechowują dane w różny sposób. Ten przewodnik wyjaśnia, jak pliki cookie zapisują małe pliki po stronie klienta, jak sesje przechowują dane po stronie serwera oraz jak tworzyć, odczytywać i usuwać oba te pliki za pomocą działającego kodu.

Co to jest plik cookie?
Plik cookie to niewielki plik o maksymalnym rozmiarze 4 KB, który serwer WWW przechowuje na komputerze klienta.
Po ustawieniu pliku cookie wszystkie następujące żądania stron zwracają nazwę i wartość pliku cookie.
Plik cookie można odczytać tylko z domeny, z której został wydany. Na przykład plik cookie ustawiony z użyciem domeny www.guru99.com nie może zostać odczytany z domeny. kariera.guru99.com.
Większość witryn internetowych wyświetla elementy z innych domen, np. reklamy. Domeny obsługujące te elementy mogą również ustawiać własne pliki cookies. Są to tak zwane pliki cookie stron trzecich.
Plik cookie utworzony przez użytkownika może być widoczny tylko dla niego. Inni użytkownicy nie widzą jego wartości.
Większość przeglądarek internetowych ma opcje umożliwiające wyłączenie obsługi plików cookie, plików cookie podmiotów trzecich lub obu tych opcji.
Jeżeli tak jest, PHP odpowiada, przekazując token cookie w URL.
Poniższy diagram ilustruje działanie plików cookies.
Tutaj,
1) Użytkownik żąda strony, która przechowuje pliki cookie
2) Serwer umieszcza plik cookie na komputerze użytkownika
3) Inne żądania strony od użytkownika zwrócą nazwę i wartość pliku cookie
Dlaczego i kiedy należy używać plików cookie?
- HTTP to protokół bezstanowy; pliki cookie pozwalają nam tracStan aplikacji jest monitorowany za pomocą małych plików przechowywanych na komputerze użytkownika. Ścieżka przechowywania plików cookie zależy od przeglądarki. Internet Explorer zazwyczaj przechowuje je w folderze Tymczasowe Pliki Internetowe.
- Personalizacja doświadczenia użytkownika – odbywa się to poprzez umożliwienie użytkownikom wyboru ich preferencji. Następujące żądania stron są personalizowane na podstawie preferencji ustawionych w plikach cookie.
- Tracking strony odwiedzane przez użytkownika
Tworzenie plików cookie
Przyjrzyjmy się teraz podstawowej składni używanej do tworzenia plików cookie.
<?php setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]); ?>
TUTAJ,
- „setcookie” to Funkcja PHP użyte do utworzenia pliku cookie.
- „cookie_name” to nazwa pliku cookie, którego serwer będzie używał podczas pobierania jego wartości ze zmiennej tablicowej $_COOKIE. Jest ona obowiązkowa.
- „cookie_value” to wartość pliku cookie, która jest obowiązkowa.
- Parametr „[expiry_time]” jest opcjonalny; można go użyć do ustawienia czasu wygaśnięcia pliku cookie, np. 1 godziny. Czas jest ustawiany za pomocą funkcji PHP time() plus/minus liczba sekund większa niż 0, np. time() + 3600 dla 1 godziny.
- „[ścieżka_cookie]” jest opcjonalna; można go użyć do ustawienia ścieżki plików cookie na serwerze. Ukośnik „/” oznacza, że plik cookie zostanie udostępniony w całej domenie. Podkatalogi ograniczają dostęp plików cookie do subdomeny.
- „[domena]” jest opcjonalne i można go użyć do zdefiniowania hierarchii dostępu do plików cookie, tj.
www.cookiedomain.comoznacza całą domenę, podczas gdywww.sub.cookiedomain.comogranicza dostęp do plików cookieswww.sub.cookiedomain.comi jego subdomeny. - „[secure]” jest opcjonalne; wartością domyślną jest false. Służy do określenia, czy plik cookie jest wysyłany przez HTTPS, jeśli jest ustawiony na true, czy przez HTTP, jeśli jest ustawiony na false.
- „[httponly]” jest opcjonalne. Jeśli jest ustawione na true, języki skryptowe po stronie klienta, takie jak JAVASCRIPT nie można uzyskać dostępu do pliku cookie.
Uwaga: Funkcja PHP setcookie musi zostać wykonana przed otwierającym znacznikiem HTML.
Przyjrzyjmy się teraz przykładowi wykorzystującemu pliki cookie.
Stworzymy prosty program, który umożliwi nam przechowywanie nazwy użytkownika w pliku cookie, który wygasa po sześćdziesięciu sekundach.
Poniższy kod przedstawia implementację powyższego przykładu „cookies.php”.
<?php setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds echo 'the cookie has been set for 60 seconds'; ?>
Wyjście:
the cookie has been set for 60 seconds
Pobieranie wartości pliku cookie
Utwórz kolejny plik o nazwie „cookies_read.php” z następującym kodem.
<?php
print_r($_COOKIE); // output the contents of the cookie array variable
?>
Wyjście:
Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )
Uwaga: $_COOKIE to wbudowana zmienna superglobalna PHP. Zawiera nazwy i wartości wszystkich ustawionych plików cookie.
Liczba plików cookie i ich rozmiar są ograniczone przez przeglądarkę, zwykle wynosi około 50 plików cookie na domenę i 4 KB na plik cookie.
Testujemy naszą aplikację. Załóżmy, że zapisałeś pliki PHP w folderze phptuts.
- Krok 1 – otwórz przeglądarkę internetową i wprowadź URL http://localhost/phptuts/cookies_read.php
Uwaga: Wyświetlono tylko pustą tablicę
- Krok 2 – przejdź do URL http://localhost/phptuts/cookies.php
- Krok 3 – wróć do pierwszej zakładki, a następnie kliknij przycisk odświeżania
Poczekaj chwilę, a następnie kliknij ponownie przycisk odświeżania. Jakie uzyskałeś rezultaty?
Usuń ciasteczka
- Jeśli chcesz zniszczyć plik cookie przed jego upływem, ustawiasz czas wygaśnięcia na czas, który już upłynął.
- Utwórz nowy plik o nazwie cookie_destroy.php z następującym kodem
<?php setcookie("user_name", "Guru99", time() - 360,'/'); ?>
- Powtórz kroki od 1 do 3 z powyższej sekcji, aby pobrać wartości plików cookie.
- Otwórz URL http://localhost/phptuts/cookie_destroy.php
- Przełącz na URL http://localhost/phptuts/cookies_read.phpJakie wyniki wyświetla?
Co to jest sesja?
- Sesja to zmienna globalna przechowywana na serwerze.
- Każdej sesji przypisany jest unikalny identyfikator, który służy do pobierania przechowywanych wartości.
- Za każdym razem, gdy tworzona jest sesja, na komputerze użytkownika zapisywany jest plik cookie zawierający unikalny identyfikator sesji, który jest zwracany z każdym żądaniem do serwera. Jeśli przeglądarka klienta nie obsługuje plików cookie, w pliku wyświetlany jest unikalny identyfikator sesji PHP. URL.
- Sesje mogą przechowywać stosunkowo duże ilości danych w porównaniu z plikami cookie.
- Wartości sesji są automatycznie usuwane po zamknięciu przeglądarki. Jeśli chcesz przechowywać wartości na stałe, powinieneś zapisać je w bazie danych.
- Podobnie jak zmienna tablicowa $_COOKIE, zmienne sesji są przechowywane w zmiennej tablicowej $_SESSION. Podobnie jak w przypadku plików cookie, sesja musi zostać rozpoczęta przed jakimkolwiek znacznikiem HTML.
Dlaczego i kiedy używać sesji?
- Chcesz przechowywać ważne informacje, takie jak identyfikator użytkownika, w bezpieczniejszy sposób na serwerze, gdzie osoby o złych zamiarach nie będą mogły nimi manipulować.
- Chcesz przekazywać wartości z jednej strony na drugą.
- Szukasz alternatywy dla plików cookie w przeglądarkach, które ich nie obsługują.
- Chcesz przechowywać zmienne globalne w sposób wydajny i bezpieczniejszy niż przekazywanie ich w URL.
- Jesteś rozwijanyping aplikacja taka jak sklepping wózek, który musi tymczasowo przechowywać informacje o pojemności większej niż 4 KB.
Tworzenie sesji
Aby utworzyć sesję, musisz najpierw wywołać funkcję PHP session_start, a następnie zapisać swoje wartości w zmiennej tablicowej $_SESSION.
Załóżmy, że chcemy wiedzieć, ile razy strona została załadowana. Możemy do tego użyć sesji.
Poniższy kod pokazuje, jak tworzyć i pobierać wartości z sesji.
<?php session_start(); // start the session if(isset($_SESSION['page_count'])) { $_SESSION['page_count'] += 1; } else { $_SESSION['page_count'] = 1; } echo 'You are visitor number ' . $_SESSION['page_count']; ?>
Wyjście:
You are visitor number 1
Niszczenie zmiennych sesji
Funkcja session_destroy() służy do niszczenia całej sesji PHP.
Jeśli chcesz zniszczyć tylko jeden element sesji, użyj funkcji unset().
Poniższy kod ilustruje sposób użycia obu metod.
<?php
session_destroy(); // destroy entire session
?>
<?php unset($_SESSION['product']); // destroy product session item ?>
session_destroy usuwa wszystkie dane sesji, łącznie z plikami cookie powiązanymi z sesją.
Polecenie unset zwalnia tylko poszczególne zmienne sesji. Pozostałe dane pozostają nienaruszone.




