Учебники

PHP — Cookies

Куки-файлы — это текстовые файлы, хранящиеся на клиентском компьютере и предназначенные для отслеживания использования. PHP прозрачно поддерживает HTTP-куки.

Есть три шага, вовлеченных в идентификацию возвращающихся пользователей —

  • Серверный скрипт отправляет набор файлов cookie в браузер. Например, имя, возраст или идентификационный номер и т. Д.

  • Браузер хранит эту информацию на локальном компьютере для дальнейшего использования.

  • Когда в следующий раз браузер отправляет какой-либо запрос на веб-сервер, он отправляет информацию о файлах cookie на сервер, и сервер использует эту информацию для идентификации пользователя.

Серверный скрипт отправляет набор файлов cookie в браузер. Например, имя, возраст или идентификационный номер и т. Д.

Браузер хранит эту информацию на локальном компьютере для дальнейшего использования.

Когда в следующий раз браузер отправляет какой-либо запрос на веб-сервер, он отправляет информацию о файлах cookie на сервер, и сервер использует эту информацию для идентификации пользователя.

Эта глава научит вас, как устанавливать куки, как получить к ним доступ и как их удалить.

Анатомия Печенья

Файлы cookie обычно устанавливаются в заголовке HTTP (хотя JavaScript также может устанавливать файлы cookie непосредственно в браузере). PHP-скрипт, который устанавливает cookie, может отправлять заголовки, которые выглядят примерно так:

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

Как видите, заголовок Set-Cookie содержит пару имя-значение, дату по Гринвичу, путь и домен. Имя и значение будут закодированы в URL. Поле expires — это инструкция для браузера «забыть» cookie после заданного времени и даты.

Если браузер настроен для хранения файлов cookie, он будет хранить эту информацию до истечения срока действия. Если пользователь указывает браузеру на любую страницу, которая соответствует пути и домену файла cookie, он будет повторно отправлять файл cookie на сервер. Заголовки браузера могут выглядеть примерно так:

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

Затем скрипт PHP будет иметь доступ к cookie в переменных среды $ _COOKIE или $ HTTP_COOKIE_VARS [], в которых хранятся все имена и значения cookie. К указанному выше файлу cookie можно получить доступ с помощью $ HTTP_COOKIE_VARS [«name»].

Настройка файлов cookie с помощью PHP

PHP предоставил функцию setcookie () для установки cookie. Эта функция требует до шести аргументов и должна вызываться перед тегом <html>. Для каждого файла cookie эта функция должна вызываться отдельно.

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

Вот деталь всех аргументов —

  • Имя — устанавливает имя файла cookie и хранится в переменной среды с именем HTTP_COOKIE_VARS. Эта переменная используется при доступе к файлам cookie.

  • Значение — устанавливает значение именованной переменной и является содержимым, которое вы на самом деле хотите сохранить.

  • Срок действия — это указывает будущее время в секундах с 00:00:00 по Гринвичу 1 января 1970 года. По истечении этого времени файл cookie станет недоступным. Если этот параметр не задан, срок действия файла cookie автоматически истекает при закрытии веб-браузера.

  • Путь — указывает каталоги, для которых cookie действителен. Один символ прямой косой черты позволяет куки-файлам быть действительными для всех каталогов.

  • Домен — это может использоваться для указания имени домена в очень больших доменах и должно содержать как минимум два периода, чтобы быть действительным. Все куки действительны только для хоста и домена, который их создал.

  • Безопасность — это может быть установлено в 1, чтобы указать, что куки должны отправляться только с помощью безопасной передачи с использованием HTTPS, в противном случае установлено значение 0, что означает, что куки могут быть отправлены по обычному HTTP.

Имя — устанавливает имя файла cookie и хранится в переменной среды с именем HTTP_COOKIE_VARS. Эта переменная используется при доступе к файлам cookie.

Значение — устанавливает значение именованной переменной и является содержимым, которое вы на самом деле хотите сохранить.

Срок действия — это указывает будущее время в секундах с 00:00:00 по Гринвичу 1 января 1970 года. По истечении этого времени файл cookie станет недоступным. Если этот параметр не задан, срок действия файла cookie автоматически истекает при закрытии веб-браузера.

Путь — указывает каталоги, для которых cookie действителен. Один символ прямой косой черты позволяет куки-файлам быть действительными для всех каталогов.

Домен — это может использоваться для указания имени домена в очень больших доменах и должно содержать как минимум два периода, чтобы быть действительным. Все куки действительны только для хоста и домена, который их создал.

Безопасность — это может быть установлено в 1, чтобы указать, что куки должны отправляться только с помощью безопасной передачи с использованием HTTPS, в противном случае установлено значение 0, что означает, что куки могут быть отправлены по обычному HTTP.

В следующем примере будут созданы два файла cookie, имя и возраст этих файлов cookie истекает через час.

<?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>

Доступ к файлам cookie с помощью PHP

PHP предоставляет множество способов доступа к файлам cookie. Самый простой способ — использовать переменные $ _COOKIE или $ HTTP_COOKIE_VARS. В следующем примере будут доступны все файлы cookie, установленные в приведенном выше примере.

<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>

Вы можете использовать функцию isset (), чтобы проверить, установлен cookie или нет.

<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>

Удаление Cookie с помощью PHP

Официально, чтобы удалить cookie, вы должны вызвать setcookie () только с аргументом name, но это не всегда работает хорошо, и на него нельзя полагаться.

Безопаснее всего установить cookie с датой, которая уже истекла —