Php как устанавливать куки

Cookies

PHP transparently supports HTTP cookies. Cookies are a mechanism for storing data in the remote browser and thus tracking or identifying return users. You can set cookies using the setcookie() or setrawcookie() function. Cookies are part of the HTTP header, so setcookie() must be called before any output is sent to the browser. This is the same limitation that header() has. You can use the output buffering functions to delay the script output until you have decided whether or not to set any cookies or send any headers.

Any cookies sent to server from the client will automatically be included into a $_COOKIE auto-global array if variables_order contains «C». If you wish to assign multiple values to a single cookie, just add [] to the cookie name.

For more details, including notes on browser bugs, see the setcookie() and setrawcookie() function.

User Contributed Notes 1 note

// Example
// Setting a cookie
setcookie ( «usertoken» , «noice» , time ()+ 20 * 24 * 60 * 60 );
// 20 days = 20*24*60*60 seconds

setcookie ( «usertoken» , «» , time ()- 3600 )
?>

  • Features
    • HTTP authentication with PHP
    • Cookies
    • Sessions
    • Dealing with XForms
    • Handling file uploads
    • Using remote files
    • Connection handling
    • Persistent Database Connections
    • Command line usage
    • Garbage Collection
    • DTrace Dynamic Tracing

    Источник

    setcookie

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

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

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

    Все аргументы, за исключением name , являются необязательными. Если нужно пропустить какой-либо аргумент, можно вместо него поставить пустую строку («»). Это не относится к аргументу expire . Так как он принимает значение типа integer, для его замены пустая строка не подходит. Используйте вместо нее ноль (0).

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

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

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

    Замечание:

    Можно заметить, что expire принимает в качестве значения метку времени 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 доступными в поддомене www и поддоменах более высоких порядков. Cookie доступные низким уровням, таким как ‘example.com’, будут доступны во всех поддоменах высших уровней, с том числе ‘www.example.com’. Старые броузеры, следующие устаревшим нормативам » RFC 2109, могут требовать . перед доменом, чтобы включались все поддомены.

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

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

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

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

    Примеры

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

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

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

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

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

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

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

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

    // установка даты истечения срока действия на час назад
    setcookie ( «TestCookie» , «» , time () — 3600 );
    setcookie ( «TestCookie» , «» , time () — 3600 , «/~rasmus/» , «example.com» , 1 );
    ?>

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

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

    // отправка 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
    \n» ;
    >
    >
    ?>

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

    three : cookiethree two : cookietwo one : cookieone

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

    Версия Описание
    5.5.0 Атрибут Max-Age теперь добавляется в заголовок Set-Cookie, отправляемый клиенту.
    5.2.0 Добавлен параметр httponly .

    Примечания

    Замечание:

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

    Замечание:

    Если PHP директива register_globals включена (задано значение on), значения cookie помимо всего прочего будут помещаться в переменные. Для примеров выше будет существовать переменная $TestCookie . Тем не менее, рекомендуется использовать $_COOKIE .

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

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

    Смотрите также

    • header() — Отправка HTTP заголовка
    • setrawcookie() — Посылает cookie не преобразовывая значение
    • раздел cookies
    • » RFC 6265
    • » RFC 2109

    Источник

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

    Установка cookies

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

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

    setcookie($name, $value, $expires, $path, $domain, $secure, $httponly);

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

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

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

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

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

    Пример установки cookies:

    // До закрытия браузера setcookie('test-1', 'Значение 1'); // На 1 месяц setcookie('test-1', 'Значение 1', strtotime('+30 days'));

    Пример установки массива в cookies:

    setcookie('test-2[0]', 'Значение 1'); setcookie('test-2[1]', 'Значение 2'); setcookie('test-2[2]', 'Значение 3');

    или

    $array = array( 'Значение 1', 'Значение 2', 'Значение 3', ); foreach ($array as $i => $row)

    Альтернативная вариант доступен с PHP 7.3.0:

    setcookie($name, $value, $options);

    Где $options массив, который может содержать любой из ключей: expires , path , domain , secure , httponly и samesite .

    Значение элемента samesite может быть либо None , Lax или Strict .

    setcookie('test-1', 'Значение 1', array( 'expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => 'example.com', 'secure' => true, 'httponly' => true, 'samesite' => 'None' ));

    Чтение cookies

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

    Например, вывести одно конкретное значение cookie:

    Вывести массив:

    Array ( [0] => Значение 1 [1] => Значение 2 [2] => Значение 3 )

    Удаление cookies

    Чтобы удалить cookies достаточно в setcookie() , в аргументе $expires указать какое-либо прошедшее время. Например 1 час:

    setcookie('test-1', '', time() - 3600);
    if (isset($_SERVER['HTTP_COOKIE'])) < $cookies = explode(';', $_SERVER['HTTP_COOKIE']); foreach($cookies as $cookie) < $parts = explode('=', $cookie); $name = trim($parts[0]); setcookie($name, '', time() - 3600); >>

    Источник

    Читайте также:  Задачи на конструкторы java
Оцените статью