PHP - pliki cookie

Pliki cookie to pliki tekstowe przechowywane na komputerze klienta i służą do śledzenia użytkowania. PHP w przejrzysty sposób obsługuje pliki cookie HTTP.

Identyfikacja powracających użytkowników obejmuje trzy kroki -

  • Skrypt serwera wysyła zestaw plików cookie do przeglądarki. Na przykład imię i nazwisko, wiek lub numer identyfikacyjny itp.

  • Przeglądarka przechowuje te informacje na komputerze lokalnym do wykorzystania w przyszłości.

  • Gdy przeglądarka następnym razem wyśle ​​jakiekolwiek żądanie do serwera internetowego, wysyła te informacje o plikach cookie do serwera, a serwer wykorzystuje te informacje do identyfikacji użytkownika.

W tym rozdziale dowiesz się, jak ustawić pliki cookie, uzyskać do nich dostęp i jak je usunąć.

Anatomia pliku cookie

Pliki cookie są zwykle umieszczane w nagłówku HTTP (chociaż JavaScript może również ustawić plik cookie bezpośrednio w przeglądarce). Skrypt PHP, który ustawia plik cookie, może wysyłać nagłówki wyglądające mniej więcej tak:

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; 
                 path=/; domain=tutorialspoint.com
Connection: close
Content-Type: text/html

Jak widać, nagłówek Set-Cookie zawiera parę nazwa-wartość, datę GMT, ścieżkę i domenę. Nazwa i wartość będą zakodowane w postaci adresu URL. Pole wygaśnięcia jest instrukcją dla przeglądarki, aby „zapomniała” plik cookie po określonej godzinie i dacie.

Jeśli przeglądarka jest skonfigurowana do przechowywania plików cookie, będzie przechowywać te informacje do daty wygaśnięcia. Jeśli użytkownik wskaże przeglądarce dowolną stronę, która jest zgodna ze ścieżką i domeną pliku cookie, wyśle ​​plik cookie ponownie na serwer. Nagłówki przeglądarki mogą wyglądać mniej więcej tak:

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

Skrypt PHP będzie miał wtedy dostęp do pliku cookie w zmiennych środowiskowych $ _COOKIE lub $ HTTP_COOKIE_VARS [], które przechowują wszystkie nazwy i wartości plików cookie. Dostęp do powyższego pliku cookie można uzyskać za pomocą $ HTTP_COOKIE_VARS ["nazwa"].

Ustawianie plików cookie w PHP

Dostarczone PHP setcookie()funkcja ustawienia pliku cookie. Ta funkcja wymaga do sześciu argumentów i powinna zostać wywołana przed znacznikiem <html>. Dla każdego pliku cookie ta funkcja musi być wywoływana osobno.

setcookie(name, value, expire, path, domain, security);

Oto szczegóły wszystkich argumentów -

  • Name- Ustawia nazwę pliku cookie i jest przechowywany w zmiennej środowiskowej o nazwie HTTP_COOKIE_VARS. Ta zmienna jest używana podczas uzyskiwania dostępu do plików cookie.

  • Value - Ustawia wartość nazwanej zmiennej i jest treścią, którą faktycznie chcesz przechowywać.

  • Expiry- To określa przyszły czas w sekundach od 00:00:00 GMT 1 stycznia 1970. Po tym czasie plik cookie stanie się niedostępny. Jeśli ten parametr nie zostanie ustawiony, plik cookie wygaśnie automatycznie po zamknięciu przeglądarki internetowej.

  • Path- Określa katalogi, dla których ważny jest plik cookie. Pojedynczy ukośnik umożliwia ważność pliku cookie we wszystkich katalogach.

  • Domain- Można to wykorzystać do określenia nazwy domeny w bardzo dużych domenach i musi zawierać co najmniej dwa okresy, aby była ważna. Wszystkie pliki cookie są ważne tylko dla hosta i domeny, która je utworzyła.

  • Security - Można ustawić na 1, aby określić, że plik cookie powinien być wysyłany tylko w ramach bezpiecznej transmisji przy użyciu protokołu HTTPS, w przeciwnym razie ustawiony na 0, co oznacza, że ​​plik cookie może być wysyłany za pośrednictwem zwykłego protokołu HTTP.

Poniższy przykład utworzy dwa pliki cookie name i age te pliki cookie tracą ważność po jednej godzinie.

<?php
   setcookie("name", "John Watkin", time()+3600, "/","", 0);
   setcookie("age", "36", time()+3600, "/", "",  0);
?>
<html>
   
   <head>
      <title>Setting Cookies with PHP</title>
   </head>
   
   <body>
      <?php echo "Set Cookies"?>
   </body>
   
</html>

Dostęp do plików cookie za pomocą PHP

PHP zapewnia wiele sposobów uzyskiwania dostępu do plików cookie. Najprostszym sposobem jest użycie zmiennych $ _COOKIE lub $ HTTP_COOKIE_VARS. Poniższy przykład pozwoli uzyskać dostęp do wszystkich plików cookie ustawionych w powyższym przykładzie.

<html>
   
   <head>
      <title>Accessing Cookies with PHP</title>
   </head>
   
   <body>
      
      <?php
         echo $_COOKIE["name"]. "<br />";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["name"]. "<br />";
         
         echo $_COOKIE["age"] . "<br />";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["age"] . "<br />";
      ?>
      
   </body>
</html>

Możesz użyć isset() funkcja, aby sprawdzić, czy plik cookie jest ustawiony, czy nie.

<html>
   
   <head>
      <title>Accessing Cookies with PHP</title>
   </head>
   
   <body>
      
      <?php
         if( isset($_COOKIE["name"]))
            echo "Welcome " . $_COOKIE["name"] . "<br />";
         
         else
            echo "Sorry... Not recognized" . "<br />";
      ?>
      
   </body>
</html>

Usuwanie plików cookie z PHP

Oficjalnie, aby usunąć plik cookie, należy wywołać setcookie () tylko z argumentem nazwa, jednak nie zawsze działa to dobrze i nie należy na nim polegać.

Najbezpieczniej jest ustawić plik cookie z datą, która już wygasła -

<?php
   setcookie( "name", "", time()- 60, "/","", 0);
   setcookie( "age", "", time()- 60, "/","", 0);
?>
<html>
   
   <head>
      <title>Deleting Cookies with PHP</title>
   </head>
   
   <body>
      <?php echo "Deleted Cookies" ?>
   </body>
   
</html>