Cookie php другой страницы

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

Источник

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

Куки (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 ;
?>

Источник

Как назначить или прочитать cookies с другого моего сайта?

Имеется:
— Сайт №1, который принимает get-параметр «g» с записанным в него значением (напр. ?g=1). Дальше он работает с ним.
— Сайт №2, который должен передать/перезаписать get-параметр «g» с его значением сайту №1.
— Значение get-параметра «g» — публичное и не несет особой ценности, кроме как владельцу сайта.
— Оба сайта расположены на разных доменах, принадлежат одному владельцу и могут находится на одном сервере.
— Пользователь, который заходит на сайт №2 с определенным get-параметром, а потом заходит на сайт №1 уже без него.

Цель: Нужно, чтобы при заходе на сайт №1, в cookies сайта №1 уже были данные get-параметра, с которым пользователь зашел на сайт №2.

Планирую решить проблему с помощью cookies. Но как я нагуглил, назначить куки другому домену, равно как и прочитать куки другого домена — нельзя. Возможно ли прописать какой-то код, который берет get-параметр с сайта №2 и записывает его в куки сайта №1? Напомню, что это не авторизационные данные и их безопасность не важна.

Заранее спасибо за любую помощь!

Из соображений безопасности нельзя читать/писать куки из другого домена (вопрос о поддоменах одного домена и свойстве domain оставляю на самостоятельное изучение). Но, как и в любом правиле здесь есть исключение. Cross-domain cookies можно сделать если оба домена твои. Под «твои» я подразумеваю что ты сам можешь на них разместить нужные тебе скрипты. Организовать это можно следующим образом. Пишем скрипт, который читает имя куки из реквеста и выдает значение в респонс, еще скрипт, который ставит куку. Теперь на другом домене мы спокойно можем расположить html где при помощи элементов script можем дергать скрипты с другого домена, которые будут читать/писать куки. Html будет лежать в одном домене, а куки дергать мы будем для другого домена.

     scripts location on other domain:  
cookie name:
cookie value:

P.S. Проверять работоспособность конкретного примера в Firefox. IE не хочет динамически грузить скрипты у которых в урле есть параметры. Но если это даже и ограничение IE, то это легко обходится через mod_rewrite.

Источник

Читайте также:  Javascript all page height
Оцените статью