Скрипты для сайтовСкрипты для сайтов

Скрипты для сайтов — работа с куками на PHP

Скрипты для сайтов — работа с куками на PHP

Введение

Откуда возник термин "cookie" никто достоверно не знает, хотя считается, что во времена зарождения Unix-систем где-то использовалось словосочетание Magic Cookies. Имелись в виду "квитанции" (token, ticket), которыми обменивались программы.

Cookie является решением одной из наследственных проблем HTTP протокола (HyperText Transfer Protocol). Эта проблема заключается в непостоянстве соединения между клиентом и сервером, как при FTP или Telnet сессии, т.е. для каждого документа (или файла) при передаче по HTTP протоколу посылается отдельный запрос. Включение cookie в HTTP протокол дало частичное решение этой проблемы. Иначе говоря, транзакция завершается после того, как браузер сделал запрос, а сервер выдал соответствующий ответ. Сразу после этого сервер "забывает" о пользователе и каждый следующий запрос того же пользователя считает новым пользователем.

Используя cookie, можно эмулировать сессию по HTTP протоколу. Коротко принцип эмуляции сессии таков: на первом запросе выдается соотвествующее значение cookie, а при каждом последующем запросе это значение читается из переменной окружения HTTP_COOKIE и соответствующим образом обрабатывается.

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

Итак,приступим к практике:

1. Задание cookie с помощью PHP

Для задания этой функции в языке php есть оператор:
setcookie() . Самое приятное,сто функция setcookie() воспринимает до шести аргументов, в зависимости от того, как вы собираетесь управлять значениями cookie и кто будет считывать ее значения.

Простейший способ установить cookie таков:

setcookie('name', 'bret');

Затем, для каждой последующей страницы на Вашем сайте, просматриваемой в течение данной сессии (пока пользователь не покинет сайт) переменная $name будет иметь значение ‘bret’ и его можно легко прочитать средствами PHP. Этот тип cookie известен как cookie-сессия, поскольку значение сохраняется в течение пользовательской сессии.

Если Вы хотите, чтобы значение cookie запоминалось браузером после того, как пользователь закончит сессию, Вы должны передать функции setcookie() третий параметр — дату истечения срока действия cookie. Поскольку PHP сформировался в основном в среде Unix, Вы должны представить время истечения срока действия cookie как число секунд, прошедших с 1 января 1970 г. Если Вы имеете опыт программирования для Unix, это не покажется Вам удивительным. Но, если Вы программировали только в среде Windows или Macintosh, Вы, может быть, удивитесь, что за чокнутый народ эти Unix-оиды.

Но не бойтесь. PHP имеет очень удобную функцию, mktime() . Вы указываете ей в качестве параметров (в указанном порядке) час, минуту, секунду, месяц, день и год, задающие тот момент времени, который Вы хотите представить в воспринимаемом UNIX формате, и mktime() возвращает Вам число секунд, прошедших с 1 января 1970 г. до указанного момента времени. Например, если Вы хотите, чтобы срок действия cookie истек 1 января 2000 г., Вы записываете:

<?php
$y2k = mktime(0,0,0,1,1,2000);
setcookie('name', 'bret', $y2k);
?>

Если Вы хотите изменить значение cookie на новое, Вы можете просто переписать его (ее?) значение. Таким образом, даже если браузер уже посылал значение cookie серверу на одной из предыдущих страниц, вполне возможно сообщить серверу, что в действительности Вас зовут "jeff."

<?php
$y2k = mktime(0,0,0,1,1,2000);
setcookie('name', 'jeff', $y2k);
?>

Обратите внимание на то, что при этом не меняется значение переменной $name. Оно устанавливается при загрузке страницы. Если Вы хотите чтобы значение переменной изменялось синхронно с изменением значения cookie, Вы должны изменить код следующим образом:

<?php
$name = 'jeff';
$y2k = mktime(0,0,0,1,1,2000);
setcookie('name', $name, $y2k);
?>

Следующие два параметра функции setcookie() позволяют Вам задать путь и имя домена того, кто может прочитать значение Вашего cookie. По умолчанию только страницы, расположенные в том же каталоге или ниже в структуре подкаталогов того сервера, который установил cookie, могут прочитать его (ее??) значение. Это делается из соображений безопасности. Однако, если у Вашего сервера два доменных имени: "www.domain.com" и "other.domain.com", и Ваш экаунт позволяет Вам обслуживать страницы из каталога ~/myhome, Вы должны вызывать функцию setcookie() следующим образом:

<?php
setcookie('name', 'jeff', $y2k, '~/myhome', '.domain.com');
?>

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

Удалить cookie тоже очень просто, достаточно передать функции setcookie() имя cookie и PHP сделает все остальное:

<?php setcookie('name'); ?>

В заключение нужно сделать еще одно замечание, касающееся использования cookie. В силу того, как организована обработка cookies в протоколе HTTP, необходимо установить значения всех cookie до вывода какого-либо текста. Если сделать наоборот, PHP выдаст Вам предупреждение и значение cookie не будет послано. Вот так правильно:

<?php
setcookie('name', 'jeff');
echo "Hello Everyone!";
?>

А так — нет:

<?php
echo "Hello Everyone!";
setcookie('name', 'jeff');
?>

2. Задание cookie с помощью JavaScript

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

Пример. Функция установки значения cookie

// name - имя cookie
// value - значение cookie
// [expires] - дата окончания действия 
cookie (по умолчанию - до конца сессии) // [path] - путь, для которого cookie действительно
(по умолчанию - документ, в котором значение было установлено) // [domain] - домен, для которого cookie действительно
(по умолчанию - домен, в котором значение было установлено) // [secure] - логическое значение, показывающее требуется ли
защищенная передача значения cookie function setCookie(name, value, expires, path, domain, secure) { var curCookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires.toGMTString() : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "") if (!caution || (name + "=" + escape(value)).length <= 4000) document.cookie = curCookie else if (confirm("Cookie превышает 4KB и будет вырезан !")) document.cookie = curCookie }

Пример. Функция чтения значения cookie

Возвращает установленное значение или пустую строку, если cookie не существует.

// name - имя считываемого cookie

function getCookie(name) {
var prefix = name + "="
var cookieStartIndex = document.cookie.indexOf(prefix)
if (cookieStartIndex == -1)
return null
var cookieEndIndex = document.cookie.indexOf
(";", cookieStartIndex + prefix.length) if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length return unescape(document.cookie.substring
(cookieStartIndex + prefix.length, cookieEndIndex)) }

Пример. Функция удаления значения cookie

Принцип работы этой функции заключается в том, что cookie устанавливается с заведомо устаревшим параметром expires, в данном случае 1 января 1970 года.

// name - имя cookie
// [path] - путь, для которого cookie действительно
// [domain] - домен, для которого cookie действительно
function deleteCookie(name, path, domain) {
if (getCookie(name)) {
document.cookie = name + "=" +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
"; expires=Thu, 01-Jan-70 00:00:01 GMT"
}

3. Задание cookie с помощью Perl

Самый мощный и гибкий способ управления документами с использованием механизма cookie — с помощью CGI-скриптов. Задание значения cookie на Perl будет выглядеть следующим образом:

print "Content-type: text/htmln";
print "Set-Cookie: username=aaa13; expires=Friday, 
31-Dec-99 23:59:59 GMT; path=/; domain=www.citforum.ru;nn";

Скрипт при выдаче результатов работы генерирует HTTP заголовок:

Content-type: text/html
Set-Cookie: "username=aaa13; expires=Friday, 
31-Dec-99 23:59:59 GMT; path=/; domain=www.webscript.ru;"

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

$cookie = $ENV{'HTTP_COOKIE'};

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

А теперь о грусном…

Ограничения

Клиент (браузер) имеет следующие ограничения для cookies:

  • всего может храниться до 300 значений cookies
  • каждый cookie не может превышать 4Кбайт
  • с одного сервера или домена может храниться до 20 значений cookie

Если ограничение 300 или 20 превышается, то удаляется первая по времени запись. При превышении лимита объема в 4Кбайт корректность значения cookie страдает — отрезается кусок записи (с начала этой записи) равный превышению объема.

В случае кэширования документов, например, proxy-сервером, поле Set-cookie HTTP заголовка никогда не кэшируется.

Если proxy-сервер принимает ответ, содержащий поле Set-cookie в заголовке, предполагается, что поле доходит до клиента вне зависимости от кода возврата 304 (Not Modified) или 200 (OK). Соответственно, если клиентский запрос содержит в заголовке Cookie, то он должен дойти до сервера, даже если жестко установлен параметр If-modified-since.

Вот и все, удачи!

 

Обмен визитами — бесплатная раскрутка сайта.

Самый простой способ, это по старинке, обмен визитами через ввод адреса сайта в форму:



Ссылка не должна превышать 200 символов и должна обязательно являться URL адресом. Без пробелов.


***

Трейн-чекс Уроки WEB программирования.

  1. ПОДДЕРЖАТЬ ПРОЕКТ на WebMoney
  2. WEST-HOSTER
  3. ПОРТАЛ СООБЩЕСТВА 🕶️
  4. HTML JS CSS РЕДАКТОР
  5. ШРИФТЫ ДЛЯ САЙТОВ
  6. ПРОМПТЫ ДЛЯ ШЕДЕВРУМА
  7. Символ неразрывного пробела
  8. Скрипт считывания клавиш
  9. Файлы куки
  10. AJAX счётчик кликов
  11. Запрет кэширования JS и PHP
  12. Координаты курсора JS
  13. Числа от 1 до 10 на JS
  14. Перевести двоичный код в кратный на JS
  15. CSS на JavaScript
  16. Новые теги HTML
  17. Может ли HTML 6 заменить JavaScript
  18. HTML форма без перезагрузки страницы
  19. Смайлы эмоджи — ГЕНЕРАТОР
  20. Форматы изображений
  21. Скрипт AJAX лайков и дизлайков
  22. Горячие клавиши
  23. Скачать изображение в CANVAS
  24. Какими будут сайты будущего?
  25. Что делает администратор сайта
  26. Девушка фурри Милка Маус
  27. CMS движки для сайтов
  28. Мануалы PHP

  29. Мануалы PHP — Фильтры
  30. Мануалы PHP — Узнать IP адрес
  31. Мануалы PHP — Файлы папки директории
  32. Мануалы PHP — Вывод файлов scandir()
  33. Мануалы PHP — Отправка данных из формы
  34. Мануалы PHP — Запись данных в файл
  35. Мануалы PHP — Запрет повторной отправки формы
  36. Мануалы PHP — Дата и время
  37. Мануалы PHP — Отправка E-mail
  38. Мануалы PHP — Работа с изображениями
  39. Мануалы PHP — Вход по паролю
  40. Отправка формы AJAX
  41. Геолокация на PHP, узнать город
  42. Выполнение PHP скрипта по клику
  43. Маскировка ссылок
  44. Таблица умножения
  45. Анимация JS

  46. Шифровка текста на JS
  47. Безумный текст
  48. Компрессор кода
  49. Уведомления на рабочий стол
  50. Перезагрузка на JS и PHP
  51. Рейтинг на JS и PHP
  52. Виджет комментариев на PHP
  53. Рекламный баннер на CSS
  54. Запрет копирования
  55. Узнать код клавиш
  56. Скрипт кода клавиш
  57. Конвертер кода в спецсимволы
  58. Бесконечный алерт
  59. Вывод случайных фраз
  60. Откуда пришёл посетитель на JS
  61. CSS type radio checkbox
  62. Эффекты с текстом
  63. Посетители онлайн на PHP
  64. Cookie счётчик посещений
  65. Анимация текста
  66. Type — range
  67. Лабиринт на JS
  68. Дата и время на JS
  69. CSS меню блокнот
  70. CSS меню книжная полка
  71. CSS вращающийся баннер
  72. JavaScript азбука морзе
  73. JavaScript копирайт
  74. JavaScript анимация текста
  75. JavaScript звуки
  76. Кнопка вверх
  77. Подсчёт символов на JavaScript
  78. Работа с куками на PHP
  79. AXAJ -JS

  80. AJAX счётчик кликов
  81. Генератор случайных чисел
  82. PHP счётчик страниц
  83. PHP запись файлов
  84. Дата посещения страницы на PHP
  85. Счётчик лайков на PHP
  86. Дата изменения страницы
  87. Игра JS — угадай число
  88. Круговое меню для сайта
  89. Навигатор
  90. Запрет копирования
  91. Вычислить дату на JS
  92. Кнопка на CSS
  93. view-source: исходный код
  94. Анимация JS
  95. Время проведённое на сайте
  96. Календарь JS
  97. Снег для сайта
  98. Анимация волны
  99. Добавить в избранное
  100. Срок жизни сайта
  101. Таймер на JS
  102. Блокировка мыши и клавиатуры
  103. Приветствие по времени суток
  104. JS время
  105. Яндекс поиск

От Милкимаус

Философ после третьего тоста. Слегка адекватен. Автор сборника песен MILKIMAUS. Приглашаю всех регистрируйтесь в сообществе, будем дружить

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