Cookie для страницы на php

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

Для установки куки на компьютере пользователя используется функция setcookie() . Она должна вызываться перед тем, как будет отправлен ответ пользователю. Эта функция имеет следующее определение:

bool setcookie(string $name, string $value, int $expire, string $path, string $domain, bool $secure, bool $httponly);

Функция setcookie() может принимать следующие параметры:

  • name : имя cookie, которое будет использоваться для доступа к его значению
  • value : значение или содержимое cookie — любой алфавитно-цифровой текст не более 4 кБайт
  • expire (необязательный параметр): срок действия в секундах, после которого cookie уничтожаются. Если данный параметр не установлен или равен 0, то уничтожение cookie происходит после закрытия браузера. Обычно устанавливается относительно текущего времени, которое можно получить с помощью функции time()
  • path (необязательный параметр): путь к каталогу на сервере, для которого будут доступны cookie. Если задать «/», cookie будут доступны для всего сайта. Если задать, например, «/mydir/» , cookie будут доступны только из каталога /mydir/ и всех его подкаталогов. По умолчанию значением является текущий каталог, в котором устанавливаются cookie.
  • domain (необязательный параметр): задает домен, для которого будут доступны cookie. Если это домен второго уровня, например, localhost.com , то cookie доступны для всего сайта localhost.com, в том числе и для его поддоменов типа blog.localhost.com . Если задан поддомен blog.localhost.com , то cookie доступны только внутри этого поддомена.
  • secure (необязательный параметр): указывает на то, что значение cookie должно передаваться по протоколу HTTPS. Если задано true , cookie от клиента будет передано на сервер, только если установлено защищенное соединение. По умолчанию равно false .
  • httponly (необязательный параметр): если равно true , cookie будут доступны только через http протокол. То есть cookie в этом случае не будут доступны скриптовым языкам, например, JavaScript. По умолчанию параметр равен false

Здесь устанавливаются две куки: «name» и «age». Первая куки уничтожается после закрытия браузера, а вторая — через 3600 секунд, то есть через час.

При необходимости мы можем увидеть сохраненные куки в браузере с помощью инструментов разработчика. Например, вид куки в Google Chrome:

Куки cookie в PHP и setcookie

В cookie можно сохранить любую информацию, но не стоит сохранять важные с точки зрения безопасности данные, например, пароли. А если и сохранять какую-то важную информацию, то следует хранить ее в зашифрованном виде.

Чтобы получить cookie, можно использовать глобальный ассоциативный массив $_COOKIE , например, $_COOKIE[«name»] . Так, получим ранее сохраненные куки:

"; if (isset($_COOKIE["age"])) echo "Age: " . $_COOKIE["age"] . "
"; ?>

Сохранение в куки массивов имеет некоторые особенности. Например, сохраним следующий массив:

setcookie("lang[1]", "PHP"); setcookie("lang[2]", "C#"); setcookie("lang[3]", "Java");

Теперь получим его и выведем на страницу:

if (isset($_COOKIE["lang"])) < foreach ($_COOKIE["lang"] as $name =>$value) < $name = htmlspecialchars($name); $value = htmlspecialchars($value); echo "$name. $value 
"; > >

Для удаления cookie достаточно в качестве срока действия указать какое-либо время в прошлом:

setcookie ("name", "", time() - 3600);

Источник

Читайте также:  Определить тип файла питон

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

    Источник

    Работа с куками

    Куки (php.net) — суперглобальная переменная , которая тесно связана с сессиями. Она является механизмом для хранения данных браузером удаленной машины для отслеживания или идентификации возвращающихся посетителей.

    В предыдущем уроке, при открытии сессии, с помощью функции session_start , на сервере создавался соответствующий файл сессии и его индификатор — это ни что иное, как тот самый id , который создавался в браузере под именем соответствующей куки ( PHPSESSID ), который включается в имя файла сессии.

    Именно благодоря значению куки мы можем индифицировать клиента и связать его с соответствующим файлом сессии.

    cookie1.png

    То, что находится в поле » время действии куки » — » сессионная «, обозначает, что данная кука будет связана с файлом сессии только на протяжении одного сеанса, то есть до тех пор, пока не будет закрыт браузер.

    Чтобы запомнить некие данные, больше чем на один сеанс (например — авторизация на сайте), нужно записать их в файл куки браузера пользователя. Куки браузера — это что-то сродни файлу сессии на сервере . Файл кук и хранится на стороне клиента (где-то во временной папке браузера)

    Мы, в этот файл куки, можем записать любую информацию, например, какую-то строку, благодоря которой, в дальнейшем сможем востановить сессию для клента.

    Функция setcookie

    Для работы с куками существует функция — setcookie (php.net) . с помощью этой функции мы можем как установить куку , так ее и удалить .

    Как и любой другой заголовок, cookie должны передаваться до того как будут выведены какие-либо другие данные скрипта .

    Данная функция имеет только один обязательный параметр — это имя куки . Все остальные параметры — опциональны.

    setcookie ( $name , $value = «» , $expire = 0 , $path = «» , $domain = «» , $secure = FALSE , $httponly = FALSE )

    name — имя cookie
    value — значение cookie
    expires — это время, когда истекает срок действия cookie
    path — это путь к директории на сервере, для которой будут доступны cookie
    Если задать ‘ / ‘, куки будут доступны во всем домене domain . Если задать ‘/test/’ , куки будут доступны только из директории /test/ и всех ее поддиректорий (например, /test/test_1/ ) домена domain .
    По умолчанию значением является текущая директория , в которой кука устанавливается.
    domain — домен, которому доступны cookie
    secure — указывает на то, что значение cookie должно передаваться от клиента по защищенному соединению HTTPS. Если задано TRUE , cookie от клиента будет передано на сервер, только если установлено защищенное соединение.
    httponly — если задано TRUE , cookie будут доступны только через HTTP-протокол . То есть cookie в этом случае не будут доступны скриптовым языкам , вроде JavaScript — это значит, что куку нельзя будет украсть через JavaScript

    Создание куки

    — создадим в папке с уроком файл index.php и запишем в него:

    // здесь ничего не должно быть
    setcookie ( ‘test’ , ‘My Value’ );
    echo $_COOKIE [ ‘test’ ];
    ?>

    где:
    — первый параметр test — имя куки
    — второй параметр My Value — значение куки
    — выводим куку, обратившись к соответствующему массиву куки и к его ключу — ‘test’

    Обновив нашу страницу (и нажав «исследовать элемент») мы увидим, что кука » test » создана, значение у нее -» My Value «, но на экран она не выводится. Для того, чтобы получить это значение куки, мы должны запросить ее обратно из браузера. То есть значение будет выведено при следующем обновлении страницы. Еще увидим, что наша кука установленна на момент сессии (на момент одного сеанса).

    cookie2.png

    Если мы хотим установить куку на большее количество времени, мы используем функцию time() , которая вернет текущее время и к нему мы прибавим нужное нам количество времени (time() + 3600 — устанавливаем куку на один час).

    // здесь ничего не должно быть
    setcookie ( ‘test’ , ‘My Value’ , time () + 3600 );
    echo $_COOKIE [ ‘test’ ];
    ?>

    cookie3.png

    К куки, как и к сессии, мы имеем доступ из различных файлов

    Создадим в папке с уроком файл test.php и попробуем здесь вывести куку — http://phplessons/20/test.php (здесь куку не устанавливаем).

    В данном случае кука прекрасно выводится.

    cookie4.png

    Создадим этот же файл test.php, но в другой директории — директория » test » в папке с уроком. Попробуем вывести куку там. Здесь тоже у нас все работает.

    cookie5

    Создадим новую куку в файле test.php директории » test «:
    setcookie(‘test2’, ‘My Value2’) ;
    И выведем для наглядности весь массив куки в файле index.php: var_dump ($_COOKIE) ;

    Файл test.php в директории test .

    — файл test.php в директории test —

    setcookie ( ‘test2’ , ‘My Value2’ );
    echo $_COOKIE [ ‘test’ ];
    echo ‘
    ‘ ;
    echo $_COOKIE [ ‘test2’ ];
    echo ‘
    ‘ ;
    echo ‘файл test из директории test’ ;
    ?>

    setcookie ( ‘test’ , ‘My Value’ , time () + 3600 );
    echo $_COOKIE [ ‘test’ ];
    echo ‘
    ‘ ;
    var_dump ( $_COOKIE );
    echo ‘
    ‘ ;
    echo ‘файл index.php’ ;
    ?>

    На странице директории /test/test.php — новая кука test2 — создалась и при обновлении страницы выводится ее значение — My Value2 :

    cookie6.png

    А на странице /index.php новая кука не появилась и значение ее не вывелось.

    cookie7

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

    Если мы хотим сделать куку доступной для всего сайта, тогда мы должны использовать еще один параметр: это параметр — path .
    Если задать ‘ / ‘, куки будут доступны во всем домене phplessons .

    Файл test.php в директории test .

    — файл test.php в директории test —

    // эта кука будет доступна для всего домена phplessons.
    setcookie ( ‘test2’ , ‘My Value2’ , time ()+ 3600 , ‘/’ )

    echo $_COOKIE [ ‘test’ ];
    echo ‘
    ‘ ;
    echo $_COOKIE [ ‘test2’ ];
    echo ‘
    ‘ ;
    echo ‘файл test из директории test’ ;
    ?>

    Страница /test/test.php:

    cookie8.png

    cookie9.png

    Удаление куки

    Чтобы удалить куку надо использовать ту же самую функцию setcookie и в ней в качестве срока действия указать какое-либо время в прошлом .

    Удалим куки test и test2 из файла index.php, предварительно закоментировав создания кук (в файлах index.php и /test/test.php):

    // setcookie(‘test’, ‘My Value’, time() + 3600);

    // удаляем куку test
    setcookie ( ‘test’ , » , time () — 3600 );

    // удаляем куку test2, здесь надо указать путь ‘/
    setcookie ( ‘test2’ , » , time () — 3600 , ‘/’ );

    echo $_COOKIE [ ‘test’ ];
    echo ‘
    ‘ ;
    var_dump ( $_COOKIE );
    echo ‘
    ‘ ;
    echo ‘файл index.php’ ;
    ?>
    — куки test и test2 (для всего домена) будут удалены

    cookie10

    Счетчик посещения страницы

    Напишем счетчик , который будет фиксировать сколько раз мы посетили страницу и выводить данное количество (файл index.php)

    Используем тернарный оператор .
    — проверяем: если у нас существует ( isset ) кука ( $_COOKIE[‘counter’] ) тогда мы ( ? ) используем функцию ( setcookie(‘counter’) ), устанавливаем ее значение ( $_COOKIE[‘counter’] ) и увеличиваем ее значение на единицу с помощью оператора префиксного инкремента , далее устанавливаем время , например, на один час, и устанавливаем путь для всего домена — (‘ / ‘).
    В противном случае ( : ), если у нас такой куки нет , тогда мы запишем в нее единицу

    isset ( $_COOKIE [ ‘counter’ ]) ? setcookie ( ‘counter’ , ++ $_COOKIE [ ‘counter’ ], time () + 3600 , ‘/’ ): setcookie ( ‘counter’ , 1 , time() + 3600 , ‘/’ );
    .
    ?>

    Таким образом, при первом обращении, проверка у нас не выполнится, поскольку куки такой нет, и соответственно выполнится вторая строка кода, то есть мы создадим куку ‘ counter ‘ со значением один ( 1 ) и на один час для всего домена .

    При повторном обращении к странице, увеличим ее значение на единицу.

    Выводим куку.
    — если у нас существует кука, тогда мы ее выведим $_COOKIE[‘counter’] , в противном случае мы выведем единицу.

    .
    echo isset ( $_COOKIE [ ‘counter’ ]) ? $_COOKIE [ ‘counter’ ] : 1 ;
    ?>

    Источник

Оцените статью