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.

  • 🍪 Czym są pliki cookie: Plik cookie to niewielki plik (do 4 KB), który serwer przechowuje na komputerze klienta i który powraca przy każdym kolejnym żądaniu.
  • 🗄️ Czym są sesje: Sesja przechowuje dane na serwerze pod unikalnym identyfikatorem, który jest przechowywany w tablicy $_SESSION i do którego odwołuje się plik cookie sesji.
  • 🆚 Kluczowa różnica: Pliki cookie przechowywane są na komputerze klienta i służą do przechowywania niewielkich, niepoufnych danych; sesje przechowywane są na serwerze i przechowują większe lub prywatne dane.
  • 🛠️. Tworzenie plików cookie: setcookie() ustawia nazwę, wartość oraz opcjonalne flagi wygaśnięcia, ścieżki, domeny, bezpieczeństwa i httponly przed jakimkolwiek wyjściem HTML.
  • 📝 Tworzenie sesji: session_start() rozpoczyna sesję, po której następuje odczyt i zapis wartości za pomocą tablicy superglobalnej $_SESSION.
  • 🗑️ Sprzątanie: Aby wygasić plik cookie, ustaw określony czas; zakończ sesję za pomocą session_destroy() lub wyczyść jedną wartość za pomocą unset().
  • 🤖 Asystent AI: Narzędzia AI mogą wdrażać bezpieczną obsługę sesji i sygnalizować słabości plików cookie lub sesji w istniejącym kodzie PHP.

Pliki cookie i sesje PHP

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.

Co to jest plik cookie

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.com oznacza całą domenę, podczas gdy www.sub.cookiedomain.com ogranicza dostęp do plików cookies www.sub.cookiedomain.com i 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

Pobieranie wartości pliku cookie

Uwaga: Wyświetlono tylko pustą tablicę

  • Krok 2 – przejdź do URL http://localhost/phptuts/cookies.php

Pobieranie wartości pliku cookie

  • Krok 3 – wróć do pierwszej zakładki, a następnie kliknij przycisk odświeżania

Pobieranie wartości pliku cookie

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.

FAQ

Pliki cookie przechowują dane w małym pliku w przeglądarce użytkownika i są przesyłane z każdym żądaniem. Sesje przechowują dane na serwerze i wysyłają jedynie plik cookie z identyfikatorem sesji. Sesje są bezpieczniejsze w przypadku danych wrażliwych lub większych.

Domyślnie PHP zapisuje dane sesji jako pliki w ścieżce ustawionej przez session.save_path w pliku php.ini, często w tymczasowym katalogu systemowym. Witryny o dużym ruchu często przełączają to na bazę danych, Redis lub obsługę Memcached.

Ustaw flagę HttpOnly, aby JavaSkrypt nie może odczytać pliku cookie, flaga Secure umożliwia przesyłanie danych tylko przez HTTPS, a atrybut SameSite ogranicza wysyłanie między witrynami. W przypadku sesji, po zalogowaniu należy ponownie wygenerować identyfikator.

Tak. Sztuczna inteligencja może generować proces logowania, który regeneruje identyfikator sesji, ustawia flagi bezpieczeństwa plików cookie, przechowuje minimalną ilość danych po stronie serwera i wymusza przekroczenia limitów czasu. RevPorównaj dane wyjściowe z wymaganiami bezpieczeństwa.

Tak. Sztuczna inteligencja może skanować pod kątem brakujących flag HttpOnly lub Secure, ryzyka utrwalenia sesji, przechowywania poufnych danych w plikach cookie oraz braku regeneracji identyfikatora po zalogowaniu, a następnie sugerować poprawiony kod.

Podsumuj ten post następująco: