Как удалить cookie php
Перейти к содержимому

Как удалить cookie php

  • автор:

Как удалить cookie php

Проектирование, разработка и оптимизация веб-приложений

Cookie в PHP

setcookie() определяет куку для отправки вместе с остальной header-информацией. Куки обязаны быть отправлены до любых других шапок/headers (это ограничение кук, а не РНР). Это требует, чтобы вы помещали вызовы этой функции перед первым выводом на страницу, т.е. до тэга <html>.

int setcookie (string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])

После того как куки установлены, доступ к ним может быть получен при загрузке следующей страницы через массив $_COOKIE (который вызывается $HTTP_COOKIE_VARS в версиях PHP до 4.1.0).

Куки будут невидимы до тех пор, пока не будет загружена следующая страница.

Куки обязаны быть удалены с теми же параметрами, с которыми были установлены.

В PHP 3 множественные вызовы setcookie() в том же скрипте могут быть выполнены в реверсном порядке. Если вы пытаетесь удалить одну куку до вставки другой, вы должны сделать вставку до удаления. В PHP 4 множественные вызовы setcookie() выполняются в порядке вызова.

Далее идут примеры отправки кук:

Пример 1. Отправка кук функцией setcookie()

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

Пример 2. Удаление куки с помощью setcookie()
Пример 3. Удаление всех кук
Пример 4.

Обратите внимание, что часть value куки будет автоматически urlencoded при отправке куки, и, когда она получена, она автоматически декодируется и присваивается переменной с тем же именем, что и имя куки. Для просмотра содержимого нашей тестовой куки в скрипте просто используйте один из следующих примеров:

Пример 5.

Вы можете также установить куки массива, используя нотацию в имени куки. Это даёт эффект установки стольких кук, сколько элементов в этом массиве, но, когда кука получается скриптом, значения помещаются в массив с именем куки:

Работа с cookie в PHP

Cookies – это механизм хранения данных браузером для отслеживания или идентификации возвращающихся посетителей. В PHP работа с Cookie происходит следующем образом:

Установка cookies

Установка cookies производится функцией setcookie или setrawcookie (без URL-кодирования значения).

Cookie передаются клиенту вместе с другими HTTP-заголовками, поэтому setcookie() должна быть вызвана до вывода в браузер.

$expires – время жизни (метка времени Unix), если 0 или пропустить аргумент, cookie будут действовать до закрытия браузера.

$path – путь к директории, из которой будут доступны cookie. Если задать '/', cookie будут доступны во всем домене.

$domain – домен, которому доступны cookie. Например, ' www.example.com ' сделает cookie доступными только в нём. Для того, чтобы сделать cookie доступными для всего домена и поддоменов, нужно указать имя домена ' example.com '.

$secure – при true значения cookie будут доступны только по HTTPS.

$httponly – при true , cookie будут доступны только через HTTP-протокол.

setcookie

Альтернативная сигнатура доступна с PHP 7.3.0 (именованные параметры не поддерживаются):

setcookie() задаёт cookie, которое будет передано клиенту вместе с другими HTTP-заголовками. Как и любой другой заголовок, cookie должны передаваться до того как будут выведены какие-либо другие данные скрипта (это ограничение протокола). Это значит, что в скрипте вызовы этой функции должны располагаться до остального вывода, включая вывод тегов <html> и <head> , а также пустые строки и пробельные символы.

После передачи клиенту cookie станут доступны через массив $_COOKIE при следующей загрузке страницы. Значения cookie также есть в $_REQUEST .

Список параметров

» RFC 6265 даёт конкретные указания, как нужно интерпретировать каждый из параметров setcookie() . name

Значение cookie. Это значение будет сохранено на клиентском компьютере; не записывайте в cookie секретные данные. Значение, присвоенное cookie c именем name , допустим, 'cookiename' , будет доступно через $_COOKIE[‘cookiename’] .

Время, когда срок действия cookie истекает. Это метка времени Unix, то есть количество секунд с начала эпохи. Один из способов установить значение — добавить количество секунд до истечения срока действия cookie к результату вызова функции time() . Например, time()+60*60*24*30 установит, что срок действия cookie истекает через 30 дней. Другой вариант — использовать функцию mktime() . Если задать 0 или пропустить аргумент, срок действия cookie истечёт с окончанием сессии (при закрытии браузера).

Замечание:

Можно заметить, что expires_or_options принимает в качестве значения метку времени Unix, а хранит его в формате Wdy, DD-Mon-YYYY HH:MM:SS GMT . PHP делает это преобразование автоматически.

Путь к директории на сервере, из которой будут доступны cookie. Если задать '/' , cookie будут доступны во всем домене domain . Если задать '/foo/' , cookie будут доступны только из директории /foo/ и всех её поддиректорий (например, /foo/bar/ ) домена domain . По умолчанию значением является текущая директория, в которой cookie устанавливается.

(Под)домен, которому доступны cookie. Задание поддомена (например, 'www.example.com' ) сделает cookie доступными в нем и во всех его поддоменах (например, w2.www.example.com). Для того, чтобы сделать cookie доступными для всего домена (включая поддомены), нужно просто указать имя домена (то есть 'example.com' ).

Старые браузеры, следующие устаревшему документу » RFC 2109, могут требовать . перед доменом, чтобы включались все поддомены.

Указывает на то, что значение cookie должно передаваться от клиента по защищённому соединению HTTPS. Если задано true , cookie от клиента будет передано на сервер, только если установлено защищённое соединение. При передаче cookie от сервера клиенту программист веб-сервера должен следить за тем, чтобы cookie этого типа передавались по защищённому каналу (стоит обратить внимание на $_SERVER[«HTTPS»] ).

Если задано true , cookie будут доступны только через HTTP-протокол. То есть cookie в этом случае не будут доступны скриптовым языкам, вроде JavaScript. Эта возможность была предложена в качестве меры, эффективно снижающей количество краж личных данных посредством XSS-атак (несмотря на то, что поддерживается не всеми браузерами). Стоит однако отметить, что вокруг этой возможности часто возникают споры о её эффективности и целесообразности. Может принимать значения true или false .

Ассоциативный массив ( array ), который может иметь любой из ключей: expires , path , domain , secure , httponly и samesite . При наличии любого другого ключа возникнет ошибка уровня E_WARNING . Значения имеют тот же смысл, как описано в параметрах с соответствующим именем. Значение элемента samesite должно быть либо None , либо Lax , либо Strict . Если какая-либо из допустимых опций не указана, её значения по умолчанию совпадают с значениями по умолчанию для явных параметров. Если элемент samesite не указан, cookie-атрибут SameSite не установлен.

Возвращаемые значения

Если перед вызовом функции клиенту уже передавался какой-либо вывод (теги, пустые строки, пробелы, текст и т.п.), setcookie() потерпит неудачу и вернёт false . Если setcookie() успешно отработает, то вернёт true . Это, однако, не означает, что клиентское приложение (браузер) правильно приняло и обработало cookie.

Список изменений

Версия Описание
8.2.0 Формат даты отправляемых файлов cookie теперь 'D, d M Y H:i:s \G\M\T' ; ранее он был 'D, d-M-Y H:i:s T' .
7.3.0 Добавлена альтернативная подпись, поддерживающая массив опций options . Эта подпись поддерживает также настройку cookie-атрибута SameSite.

Примеры

Ниже представлено несколько примеров, как отправлять cookie:

Пример #1 Пример использования setcookie()

<?php
$value = ‘что-то откуда-то’ ;

setcookie ( «TestCookie» , $value );
setcookie ( «TestCookie» , $value , time ()+ 3600 ); /* срок действия 1 час */
setcookie ( «TestCookie» , $value , time ()+ 3600 , «/

Стоит отметить, что значение cookie перед отправкой клиенту подвергается URL-кодированию. При обратном получении значение cookie декодируется и помещается в переменную, с тем же именем, что и имя cookie. Если вы не хотите, чтобы значения кодировались, используйте функцию setrawcookie() . Посмотреть содержимое наших тестовых cookie можно, запустив один из следующих примеров:

<?php
// Вывести одно конкретное значение cookie
echo $_COOKIE [ «TestCookie» ];

// В целях тестирования и отладки может пригодиться вывод всех cookie
print_r ( $_COOKIE );
?>

Пример #2 Пример удаления cookie посредством setcookie()

Чтобы удалить cookie достаточно в качестве срока действия указать какое-либо время в прошлом. Это запустит механизм браузера, удаляющий истёкшие cookie. В примерах ниже показано, как удалить cookie, заданные в предыдущих примерах:

Пример #3 setcookie() и массивы

Имеется возможность помещать в cookie массивы. Для этого каждому cookie нужно дать имя в соответствии с правилами именования массивов. Такая возможность позволяет поместить столько значений, сколько имеется элементов в массиве. При обратном получении все эти значения будут помещены в массив с именем этого cookie:

<?php
// отправка cookie
setcookie ( «cookie[three]» , «cookiethree» );
setcookie ( «cookie[two]» , «cookietwo» );
setcookie ( «cookie[one]» , «cookieone» );

// после перезагрузки страницы, выведем cookie
if (isset( $_COOKIE [ ‘cookie’ ])) <
foreach ( $_COOKIE [ ‘cookie’ ] as $name => $value ) <
$name = htmlspecialchars ( $name );
$value = htmlspecialchars ( $value );
echo » $name : $value <br />\n» ;
>
>
?>

Результат выполнения данного примера:

Замечание: Использование разделительных символов, таких как [ и ] как часть имени файла cookie, не соответствует RFC 6265, раздел 4, но предполагается, что оно поддерживается пользовательскими агентами в соответствии с RFC 6265, раздел 5.

Примечания

Замечание:

Чтобы иметь возможность отправлять вывод скрипта до вызова этой функции, можно воспользоваться буферизацией. В этом случае весь вывод скрипта помещается в буфер на сервере и остаётся там, пока вы явно не отправите его браузеру. Управление буферизацией осуществляется функциями ob_start() и ob_end_flush() в скрипте, либо можно задать директиву output_buffering в файле php.ini или конфигурационных файлах сервера.

  • Cookie станут видимыми только после перезагрузки страницы, для которой они должны быть видны. Для проверки, правильно ли cookie установились, проверьте их при следующей загрузке страницы до истечения срока их действия. Срок действия cookie задаётся в параметре expires_or_options . Удобно проверять существование cookie простым вызовом print_r($_COOKIE); .
  • При удалении cookie должны быть заданы те же параметры, что и при установке. Если в качестве значения задать пустую строку, а остальные параметры задать соответственно предыдущему вызову, установившему cookie, тогда cookie c заданным именем будет удалено с клиентской машины. Внутренне это выглядит так: cookie присваивается значение 'deleted' , а срок действия переносится на год в прошлое.
  • Так как установка значения false приведёт к удалению cookie, не следует задавать cookie значения булевого типа. Вместо этого можно использовать 0 для false и 1 для true .
  • Cookie можно именовать, как массивы, и они будут доступны в PHP-скрипте, как массивы, но на пользовательской машине они будут храниться в виде отдельных записей. Для задания cookie c множеством имён и значений желательно использовать функцию explode() . Не рекомендуется для этих целей использовать функцию serialize() , так как это негативно сказывается на безопасности скрипта.

При многократных вызовах setcookie() функции выполняются в том порядке, в котором вызывались.

Как удалить cookie php

Cookie: A Cookie is a small file sent by the server to preserve stateful information for a user. It is stored on the client’s computer and sent to the server every time the user makes a request for the same page.

To create cookies you can set the cookie by using the setcookie() function of the PHP.

Syntax:

Parameters: This function accepts seven parameters as mentioned above and described below:

  • name: The name of the cookie.
  • value: The value you want to store in the cookie.
  • expire-time: It is the number of seconds until the cookie will be kept on the user’s machine by the browser. After that, it will automatically be deleted. If not set then the cookie will be preserved by browser until it is open.
  • path: It determines for which directories cookie will valid. If you want to access it in all directories then put it on “/”, i.e. the cookie is accessible in the entire domain. Otherwise, the cookie will be limited to the subdirectory.
  • domain: It is used to define the access hierarchy for the cookie. For example, if you set this to “yourdomain.com”, it will be accessible via all the subdomains also. but if it set to “sub.yourdomain.com”, it will be accessible by “sub.yourdomain.com” and its subdomains.
  • secure: It determines how the cookie will be sent, via HTTP or HTTPS. If set to true then the cookie will be sent via HTTPS only, otherwise, it will be sent via HTTP. Its default value is false.
  • httponly: If it set to true, the cookie is accessible only either via HTTP or HTTPS. That means the client code (like Javascript) can not access the cookie.

Out of the above parameters, only the first two parameters are mandatory. Others are optional parameters. If you want to preserve the cookie, then provide the expire-time parameter.

Note: It is stored in the global array named $_COOKIE.

Creating a Cookie: As mentioned earlier, we can set cookies by using the function setcookie().

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *