ProfiPHPProfiPHP
Категория: Функции протокола HTTP

Функция Setcookie

Функция Setcookie задает Cookie, которое будет передано клиенту вместе с другими HTTP заголовками.
bool setcookie( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )
Как и любой другой заголовок, Cookie должны передаваться до того, как будут выведены какие-либо другие данные скрипта (это ограничение протокола).

После передачи клиенту Cookie станут доступны через массив $_COOKIE при следующей загрузке страницы.

Параметр Name содержит название Cookie.

В параметре Value указывается значение Cookie, которое будет сохранено на клиентском компьютере.

В параметре Expire указывается время, когда срок действия Cookie истекает. Это метка времени Unix, то есть это количество секунд с начала эпохи. Другими словами, желательно задавать это время с помощью функции Time, прибавляя время в секундах, через которое срок действия Cookie должен истечь. Либо можно воспользоваться функцией Mktime. Если задать 0 или пропустить этот аргумент, срок действия Cookie истечет с окончанием сессии (при закрытии броузера).

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

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

Параметр Secure указывает на то, что значение Cookie должно передаваться от клиента по защищенному HTTPS соединению. Если задано TRUE, Cookie от клиента будет передано на сервер, только если установлено защищенное соединение. При передаче Cookie от сервера клиенту следить за тем, чтобы Cookie этого типа передавались по защищенному каналу, должен программист веб-сервера (стоит обратить внимание на $_SERVER["HTTPS"]).

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

Функция Setcookie возвращает TRUE, если обработка произошла успешно, иначе вернет FALSE, например, если перед вызовом функции клиенту уже передавался какой-либо вывод (тэги, пустые строки, пробелы, текст и т.п.).

Примеров отправки Cookie:
setcookie( 'user_id', $user_id, time(  ) + 3600, "/", "", FALSE, TRUE );
Результатом примера будет создания Cookie с названием 'user_id' и значением $user_id сроком действия 1 час, доступностью во всем домене, разрешением использования только HTTP протоколом.

Стоит отметить, что значение Cookie перед отправкой клиенту подвергается URL-кодированию. При обратном получении значение Cookie декодируется и помещается в переменную, с тем же именем, что и имя Cookie.

Для просмотра содержимого Cookie необходимо воспользоваться следующим выражением:
echo $_COOKIE['user_id'];
Чтобы удалить Cookie достаточно в качестве срока действия указать какое-либо время в прошлом:
setcookie( 'user_id', '', time(  ) - 3600 );
При удалении Cookie должны быть заданы те же параметры, что и при установке. Если в качестве значения задать пустую строку или FALSE, а остальные параметры задать соответственно предыдущему вызову, установившему Cookie, тогда Cookie c заданным именем будет удалено с клиентской машины.

Так как установка значения FALSE приведет к удалению Cookie, не следует задавать Cookie значения булевого типа. Вместо этого можно использовать '0' для FALSE и 1 для TRUE.

Cookie можно именовать, как массивы, и они будут доступны в PHP скрипте, как массивы, но на пользовательской машине они будут храниться в виде отдельных записей. Для задания Cookie c множеством имен и значений желательно использовать функцию Explode. Не рекомендуется для этих целей использовать функцию Serialize(), так как это негативно сказывается на безопасности скрипта.

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

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

Имя:
Текст комментария:
Бесплатные советы по seo оптимизации тут.