Php отримати значення cookie. Вчимося працювати з cookie в PHP

Cookies - це механізм зберігання даних оглядачем віддаленого комп'ютера для ідентифікації повертаються відвідувачів і зберігання параметрів веб-сторінок (наприклад, змінних).

Наведемо приклад використання Cookies на конкретному прикладі.

Припустимо, нам потрібно написати лічильник відвідування сайту. Нам потрібно знати, яке число відвідувань сайту здійснювалося кожним конкретним відвідувачем.

Дану задачу можна вирішити двома способами. Перший з них полягає у веденні обліку IP-адрес користувачів. Для цього потрібна база даних всього з однієї таблиці, приблизна структура якої така:

Коли користувач заходить на сайт, нам потрібно визначити його IP-адресу, знайти в базі даних інформацію про його відвідини, збільшити лічильник і вивести його в браузер відвідувача. Написати обробник (скрипт) подібної процедури нескладно. Однак при використанні такого методу у нас з'являються проблеми наступного характеру:

  • Для кожного IP-адреси потрібно вести облік в одній таблиці, яка може бути дуже великий. А з цього випливає, що ми нераціонально використовуємо процесорний час і дисковий простір;
  • У більшості домашніх користувачів IP-адреси є динамічними. Тобто, сьогодні у нього адресу 212.218.78.124, а завтра - 212.218.78.137. Таким чином, велика ймовірність ідентифікувати одного користувача кілька разів.

Можна використовувати другий спосіб, який набагато легше в реалізації і більш ефективний. Ми встановлюємо в Cookie змінну, яка буде зберігатися на диску віддаленого користувача. Ця змінна і буде зберігати інформацію про відвідування. Вона буде зчитуватися скриптом при зверненні відвідувача до сервера. Вигода такого методу ідентифікації очевидна. По-перше, нам не потрібно зберігати безліч непотрібної інформації про IP-адреси. По-друге, нас не цікавлять динамічні IP-адреси, оскільки дані про свої відвідини зберігаються конкретно у кожного відвідувача сайту.

Тепер зрозуміло, для чого ми можемо використовувати Cookie - для зберігання невеликої за обсягом інформації у клієнта (відвідувача) сайту, наприклад: настройки сайту (колір фону сторінок, мова, оформлення таблиць і.т.д.), а також іншої інформації.

Файли Cookies являють собою звичайні текстові файли, які зберігаються на диску у відвідувачів сайтів. Файли Cookies і містять ту інформацію, яка була в них записана сервером.

програмування Cookies

Приступимо до програмування Cookies.

Для установки Cookies використовується функція SetCookie () . Для цієї функції можна вказати шість параметрів, один з яких є обов'язковим:

  • name - задає ім'я (рядків), закріплене за Cookie;
  • value - визначає значення змінної (рядок);
  • expire - час "життя" змінної (ціле число). Якщо даний параметр не вказати, то Cookie будуть "жити" до кінця сесії, тобто до закриття браузера. Якщо час вказано, то, коли воно настане, Cookie самознищиться.
  • path - шлях до Cookie (рядок);
  • domain - домен (рядок). Як значення встановлюється ім'я хоста, з якого Cookie був встановлений;
  • secure - передача Cookie через захищене HTTPS-з'єднання.

Зазвичай використовуються тільки три перші параметра.

Приклад установки Cookies:



SetCookie ( "Test", "Value");

// Встановлюємо Cookie на одну годину після установки:
SetCookie ( "My_Cookie", "Value", time () + 3600);

?>

При використанні Cookies необхідно мати на увазі, що Cookies повинні встановлюватися до першого виводу інформації в браузер (наприклад, оперетор echo або висновком якої-небудь функції). Тому бажано встановлювати Cookies на самому початку скрипта. Cookies встановлюються за допомогою певного заголовка сервера, а якщо скрипт виводить що-небудь, то це означає, що починається тіло документа. В результаті Cookies НЕ будуть встановлені і може бути виведено попередження. Для перевірки успішності установки Cookies можна використовувати такий метод:

// Встановлюємо Cookie до кінця сесії:
// У разі успішного встановлення Cookie, функція SetCookie повертає TRUE:
"

Cookies успішно встановлені!

" ;
?>

функція SetCookie () повертає TRUE в разі успішного встановлення Cookie. У разі, якщо Cookie встановити не вдається SetCookie () поверне FALSE і можливо, попередження (залежить від налаштувань PHP). Приклад невдалої установки Cookie:

// Cookies встановити не вдасться, оскільки перед відправкою
// заголовка Cookie ми виводимо в браузер рядок "Hello":
echo "Hello";
// Функція SetCookie поверне FALSE:
if (SetCookie ( "Test", "Value")) echo "

Cookie успішно встановлений!

" ;
else echo "

Cookie встановити не вдалося!

"
;
// Виводить "Cookie встановити не вдалося!".
?>

Cookie встановити не вдалося, оскільки перед посилкою заголовка Cookie ми вивели в браузер рядок "Hello".

Читання значень Cookies

Отримати доступ до Cookies та їх значенням досить просто. Вони зберігаються в суперглобальних масивах і $ _COOKIE і $ HTTP_COOKIE_VARS.

Доступ до значень здійснюється по імені встановлених Cookies, наприклад:

echo $ _COOKIE [ "my_cookie"];
// Виводить значення встановленої Cookie "My_Cookie"

Приклад установки Cookie і подальшого його читання:

// Встановлюємо Cookie "test" зі значенням "Hello" на одну годину:
setcookie ( "test", "Hello", time () + 3600);
// При наступному запиті скрипта виводить "Hello":
echo @ $ _COOKIE [ "test"];
?>

У розглянутому прикладі при першому зверненні до скрипту встановлюється Cookie "test" зо значенням "hello". При повторному зверненні до скрипту буде виведено значення Cookie "test", тобто рядок "Hello".

При читанні значень Cookies звертайте увагу на перевірку існування Cookies, наприклад, використовуючи оператор isset () . Або шляхом придушення виведення помилок опереатором @

А ось приклад, як побудувати лічильник числа завантажень сторінки за допомогою Cookies:

// Перевіряємо, чи був вже встановлений Cookie "Mortal",
// Якщо так, то читаємо його значення,
// І збільшуємо значення лічильника звернень на сторінку:
if (isset ($ _COOKIE [ "Mortal"])) $ cnt \u003d $ _COOKIE [ "Mortal"] + 1;
else $ cnt \u003d 0;
// Встановлюємо Cookie "Mortal" зо значенням лічильника,
// З часом "життя" до 18/07/29,
// Тобто на дуже довгий час:
setcookie ( "Mortal", $ cnt, 0x6FFFFFFF);
// Виводить число відвідувань (завантажень) цієї сторінки:
echo "

Ви відвідували цю сторінку " [Email protected]$ _COOKIE [ "Mortal"]. " раз

" ;
?>

видалення Cookies

Іноді виникає необхідність видалення Cookies. Зробити це нескладно, необхідно лише знову встановити Cookie з ідентичним ім'ям і порожнім параметром. наприклад:

// Видаляємо Cookie "Test":
SetCookie ( "Test", "");
?>

Установка масиву Cookies і йогочитання

Ми може встановити масив Cookies, використовуючи квадратні дужки в іменах Cookies, а потім прочитати масив Cookies і значення цього масиву:

// Встановлюємо масив Cookies:
setcookie ( "cookie", "Перший");
setcookie ( "cookie", "Другий");
setcookie ( "cookie", "Третій");

// Після перезавантаження сторінки ми відобразимо
// Склад масиву Cookies "cookie":
if (isset ($ _COOKIE [ "cookie"])) (
foreach ($ _COOKIE [ "cookie"] as $ name \u003d\u003e $ value) (
echo "$ name: $ value
" ;
}
}
?>

Переваги використання Cookies незаперечні. Однак існують і деякі проблеми їх використання. Перша з них полягає в тому, що відвідувач може блокувати прийом Cookies браузером або просто видалити всі Cookies або їх частину. Таким чином, ми можемо мати деякі проблеми в ідентифікації таких відвідувачів.



<<< Назад зміст вперед \u003e\u003e\u003e
Є ще питання чи щось незрозуміло - ласкаво просимо на наш

Всім привіт!

Я знову в строю! Останнім часом зміни в житті змушують частенько віддалятися від блогу, але тим не менше я тут і нікуди не йду! Скоро буде ряд дуже корисних і пізнавальних уроків по заробітку! НЕ пропустіть! А поки я розповім про те, як в php працювати з куками. Як можна легко створити, видалити або оновити куки в php?

У наступних статтях ми розглянемо роботу куки в WordPress. А поки для загального розвитку розберемо саме поняття куки.

Не буду писати банальщину про те, що куки це в перекладі печеньки і все таке. Інформація ця, на мій погляд, абсолютно марна. Скажу інакше, куки - це якась інформація, яка зберігається у Вашому браузері.

Наприклад, Ви вирішили проголосувати в опитуванні. Далі Ви ще раз захотіли проголосувати, але замість прийняття голосу вилазить повідомлення: "Ви вже голосували". Здавалося б, на сайті ми не реєструвалися, звідки інформація, що ми вже голосували?

Вся справа в куках. При голосуванні, Вам в браузер додається невеликий файлик з інформацією про те, що Ви вже голосували. І при новому голосуванні, скрипт на сервері перевіряє, чи є у Вас такий файлик. Якщо є - значить Ви вже голосували. Все просто.

Як створити куки в php?

Створюються куки в php завдяки функції setcookie. Ця функція приймає в себе наступні параметри:

setcookie ( "Ім'я", "Значення", "Термін", "Шлях", "Домен", "Захист");

  • Обов'язковий тут тільки один параметр - "Ім'я".
  • "Значення" вказується значення куки, як вже все здогадалися.
  • Термін - скільки часу куки будуть працювати? Після закінчення терміну дії, кука автоматично буде видалена. Термін може бути безстроковим, в разі, якщо ми не вказуємо значення "термін". Термін встановлюється тільки в секундах!
  • Шлях - з якого каталогу буде доступна кука. (Зазвичай не вказується, і доступна з усіх каталогів)
  • Домен - домен вказується автоматично. У разі, якщо доступ до куки потрібно отримувати і на піддоменів, можна вказати ".сайт". В такому випадку кука буде доступна на всіх сайтах з адресами: name.сайт
  • Захист - якщо написано TRUE, тоді куки передаються по шифрованому з'єднанню (ssl).

Створення куки на PHP

Тепер якщо подивитися в браузері (я використовую mozilla), то ми побачимо куку в дії:

Як бачите, куки встановилися рівно на 1 день, з потрібним, нам, назвою, і за потрібне значенням.

Як оновити куки php?

Припустимо нам потрібно оновити значення куки. Тобто назва буде той же, але значення або термін дії треба змінити. У такому випадку нам знову ж знадобиться функція setcookie.

Операція нічим не відрізняється від операції створення куків. Точно так же пишемо схожий код, але зі зміненими даними:

Тепер подивимося, що міститься в браузері:

Як бачите, оновлення куки відбулося успішно!

Як прочитати \\ отримати куку php?

Те, що в браузері відображається кука, це добре, але ж ми її створюємо, щоб згодом використовувати в наших скриптах. Так як же отримати куку? Для цього існує глобальний масив кук $ _COOKIE, В якому знаходяться взагалі все створені куки. Звернутися до них легко - досить знати ім'я.

Тепер кука віддалиться!

Одне важливе зауваження, про який ніхто не говорить. Коли я тільки починав вивчати програмування, я видалив куку цим способом. Зайшов в браузер - кука залишилася. Перерив все форуми - така проблема часто зустрічається, але все відповідають мовляв: "Хм, не знаю, у мене працює". А причина ось у чому - кука видаляється, але не з файлів користувача. Там вона залишається. І відкриваючи браузер, Ви її бачите, але якщо ми звернемося до неї за допомогою $ _COOKIE [ "wpguru"], То в результаті буде 0. Ось так можна легко перевірити, чи повністю кука.

На цьому у мене все, найближчим часом будуть виходити ще статті. Швидше за все я опишу в наступній статті, які плани чекають блог, і докладно розповім про серію статей про заробіток. Все буде в онлайн-режимі, тобто я заробляю, і пишу статтю. А не просто теорію віщають.

Так що чекайте.

До зустрічі!

Визначає куку для відправки разом з рештою header-інформацією. Кукі повинні бути відправлені до будь-яких інших шапок / headers (це обмеження кук, а не РНР). Це вимагає, щоб ви поміщали виклики цієї функції перед першим висновком на сторінку, тобто до тега.

int setcookie (String name [, string value [, int expire [, string path [, string domain [, int secure]]]]])

Всі аргументи, крім name , Є необов'язковими. Якщо є тільки аргумент name, кука з цим ім'ям буде видалена з віддаленого клієнта. Ви можете також замістити будь-який аргумент символом нового рядка ( "" ), Щоб пропустити цей аргумент. аргументи expire і secure це цілі числа / integer і вони не можуть бути пропущені за допомогою порожнього рядка. У них використовуйте нуль ( 0 ). аргумент expire це звичайне Unix time integer, що повертається функціями time () або mktime (). аргумент secure вказує, що дана кука повинна передаватися тільки через секретне HTTPS-з'єднання.

Після того як куки встановлені, доступ до них може бути отриманий при завантаженні наступної сторінки через масив $ _COOKIE (який викликається $ HTTP_COOKIE_VARS в версіях PHP до 4.1.0).

Звичайні пастки:

    Кукі будуть невидимі доти, поки не буде завантажена наступна сторінка.

    Кукі повинні бути видалені з тими ж параметрами, з якими були встановлені.

У PHP 3 множинні виклики setcookie () в тому ж скрипті можуть бути виконані в реверсному порядку. Якщо ви намагаєтеся видалити одну куку до вставки інший, ви повинні зробити вставку до видалення. У PHP 4 множинні виклики setcookie () виконуються в порядку виклику.

Приклад 1. Відправлення кук функцією setcookie ()
setcookie ( "TestCookie", $ value); setcookie ( "TestCookie", $ value, time () + 3600); // період дії - 1 година setcookie ( "TestCookie", $ value, time () + 3600 "/ ~ rasmus /", ".utoronto.ca", 1);

При видаленні куки ви повинні переконатися, що дата закінчення дії пройшла, щоб перемкнути механізм у вашому браузері. Далі йдуть приклади видалення куки, створеної в попередньому прикладі:

Приклад 2. Видалення куки за допомогою setcookie ()
// встановити дату закінчення дії на одну годину назад setcookie ( "TestCookie", "", time () - 3600); setcookie ( "TestCookie", "", time () - 3600, "/ ~ rasmus /", ".utoronto.ca", 1);
Приклад 3. Видалення всіх кук
foreach ($ _ COOKIE as $ ind \u003d\u003e $ val) @setcookie ($ ind, "", time () - 999, "/", ".". $ _ SERVER [ "SERVER_NAME"]);
Приклад 4.

Зверніть увагу, що частина value куки буде автоматично urlencoded при відправці куки, і, коли вона отримана, вона автоматично декодується і присвоюється змінної з тим же ім'ям, що і ім'я куки. Для перегляду вмісту нашої тестової куки в скрипті просто використовуйте один з наступних прикладів:

Echo $ TestCookie; echo $ _COOKIE [ "TestCookie"];

Приклад 5.

Ви можете також встановити куки масиву, використовуючи нотацію в імені куки. Це дає ефект установки стількох кук, скільки елементів в цьому масиві, але, коли кука виходить скриптом, значення поміщаються в масив з ім'ям куки:

Setcookie ( "cookie", "cookiethree"); setcookie ( "cookie", "cookietwo"); setcookie ( "cookie", "cookieone"); foreach ($ _ COOKIE as $ name \u003d\u003e $ val) (echo "$ name \u003d $ value
\\ N ";)

Приклад 6.

Якщо у Вашого сервера два доменних імені: "www.domain.com" і "other.domain.com", і Ваш аккаунт дозволяє обслуговувати сторінки з каталогу ~ / myhome, Ви повинні викликати функцію setcookie () наступним чином:

Setcookie ( "name", $ value, time () + 3600 "~ / myhome", " .domain.com");

Приклад 7. Лічильник в куки за допомогою setcookie ()

Про куках додатково


У цій статті я розповім вам про те, що таке Cookie (в перекладі з англійської - печиво, до слова про зображення), як їх використовують, наскільки вони важливі в сучасному Рунеті і як з ними працювати засобами PHP.

Тепер трохи сухої, але обов'язкової інформації, яка після буде пояснена на прикладах)

Cookie - це набір даних (зберігається як текстовий файл), який створюється web-сервером і який відсилається при кожному зверненні до сервера. Cookie зберігаються в браузері користувача і складаються для певного сайту.

Кукі, як правило, використовують для зберігання технічних даних користувача (кеш унікального id для автоматичного входу на сайт, особисті настройки і статистики), інтернет-ресурсу (що дивився, що натискав) і загальних даних по перевагах (наприклад любить сайти, присвячені автомобілям, а значить йому можна показувати відповідну рекламу на інших сайтах - звертали увагу на таке? Це cookie). Куку видаляють в основному двома способами: засобами PHP і самостійної чищенням користувача кук свого браузера.

Приклади запису cookie на PHP

Перше і найголовніше - запис куки в браузер. Нижче наведені приклади записи, продовження, скорочення на PHP.
Для запису, продовження, скорочення терміну дії куки використовується setcookie.

// створюємо куку
setcookie ( "Name", "Value", time () + 3600); // створили cookie з назвою Name, значенням Value на 3600 (1 год секунд)

// скорочуємо термін дії
setcookie ( "Name", "", time () - 3600); // термін дії куки скорочений на годину
?>

Як перевірити, записалося Чи має значення для cookie?

setcookie ( "Name", "Value", time () + 3600); // створюємо куку
if (SetCookie ( "Test", "Value")) echo "

Cookies успішно встановлені!

";
// при наступному запиті виведе "Value":
echo @ $ _ COOKIE [ "Test"]; // виводимо куку. Нагадую, знак @ не виводити помилку в разі відсутності куки
?>
В останньому прикладі при виведенні куки ми використовуємо спеціальний для цього масив $ _COOKIE.

Як видалити Cookie в PHP?

Для видалення куки використовується також setcookie або unset.

unset ($ _ COOKIE [ "Name"]); // перший спосіб видалити куку
setcookie ( "Name", "Value", time () - 1); // другий спосіб - візьмемо і прострочив дію куки
setCookie ( "Name", ""); // третій спосіб - залишаємо значення порожнім
?>

Пишемо перший скрипт з використанням Cookie на PHP - форма авторизації

І давайте зараз з Вами вирішимо таку задачу: якщо користувач авторизований на сайті, то привітатися з ним, інакше вивести форму входу. Причому, якщо дані, введені в форму, неправильні, то вивести відповідне попередження. Реалізація виглядає наступним чином:

// вивід форми для введення даних
// після натискання "Увійти" сторінка оновлюється
function showForm () (
$ String \u003d "

";
$ String. \u003d " ";
$ String. \u003d " ";
$ String. \u003d "";
$ String. \u003d " ";
$ String. \u003d " ";
$ String. \u003d "";
$ String. \u003d " ";
$ String. \u003d "
";
return $ string;
}
// перевірка введених користувачем даних. Якщо вірно, то повертає true
function check ($ login, $ pass) (
if (($ login \u003d\u003d "admin") && ($ pass \u003d\u003d md5 ( "12345"))) return true;
else return false;
}
// тепер запис
if (isset ($ _ POST [ "log"])) (
$ Login \u003d $ _POST [ "login"];
$ Pass \u003d md5 ($ _ POST [ "pass"]);
if (check ($ login, $ pass)) (
setcookie ( "login", $ login);
setcookie ( "pass", $ pass);
}
else echo "Ви ввели неправильні дані. Будь ласка, спробуйте ще";
}
?>




setcookie ( "login", $ login);
setcookie ( "pass", $ pass);
// нижче дубль попереднього коду, який дозволяє реалізувати сценарій в рамках однієї сторінки
$ Login \u003d $ _COOKIE [ "login"];
$ Pass \u003d $ _COOKIE [ "pass"];
if (check ($ login, $ pass)) echo "Привіт, $ login";
else echo showForm ();
?>


Дивимося результат роботи. Після демонстрації обов'язково прочитайте опис роботи коду.

Код і його логіка прості. У верхній частині ми створили функції-обробники: висновок форми для входу, перевірка відповідності даних (якщо успіх, то повертає true, якщо дані не збігаються, то - false):

Після цього проводимо запис куки.

Зверніть увагу на $ _SERVER (можна замінити на $ _SERVER). Ця константа містить шлях до поточного файлу. В результаті обробки форми (значення атрибута action) звертається по цьому ж шляху, до цього файлу.

Слідом йде перевірка відправки форми (передавалися Чи має значення log, тобто натискали чи кнопку Ввійти). Якщо так, то перевіряються дані login і pass. Варто звернути увагу, що пароль не передається в чистому вигляді, а зашифрована вбудованої в PHP функцією шифрування даних md5 ().

Порівняння пароля в даному скрипті відбувається за моделлю шифруємо (пароль з форми) збігається з шифруємо (пароль за замовчуванням). Якщо перевірка пройшла успішно, то отримуємо true і далі відбувається запис в cookie. Якщо немає, то виводиться повідомлення - Ви ввели неправильні дані. Будь ласка, спробуйте ще. І знову виводимо форму авторизації з HTML-тегами.

Дякую за увагу!

Звідки виник термін "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 р Ви записуєте:

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

Зверніть увагу на те, що при цьому не змінюється значення змінної $ name. Воно встановлюється при завантаженні сторінки. Якщо Ви хочете щоб значення змінної змінювалося синхронно зі зміною значення cookie, Ви повинні змінити код наступним чином:

Наступні два параметри функції setcookie () дозволяють Вам задати шлях і ім'я домену того, хто може прочитати значення Вашого cookie. За замовчуванням тільки сторінки, розташовані в тому ж каталозі або нижче в структурі підкаталогів того сервера, який встановив cookie, можуть прочитати його (її ??) значення. Це робиться з міркувань безпеки. Однак, якщо у Вашого сервера два доменних імені: "www.domain.com" і "other.domain.com", і Ваш екаунт дозволяє обслуговувати сторінки з каталогу ~ / myhome, Ви повинні викликати функцію setcookie () наступним чином:

Останній параметр функції setcookie (), який ми ніколи не використовували, вимагає, щоб значення cookie передавалося тільки на ті Web-сервера, які викорис безпечний протокол з'єднання, такий як SSL. Якщо Вам це потрібно, то задайте для шостого параметра значення 1.

Видалити cookie теж дуже просто, достатньо передати функції setcookie () ім'я cookie і PHP зробить все інше:

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

А так - ні:

2. Завдання cookie за допомогою JavaScript

Можна задавати значення cookie, використовуючи мову JavaScript. Єдиний недолік цього способу полягає в тому, що не всі браузери його підтримують. Нижче наведені приклади функцій JavaScript, написані Олексієм Александровим для скрипта "Організатор".

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

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

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

Повертає встановлене значення або порожній рядок, якщо cookie не існує.

// name - ім'я зчитує cookie function getCookie (name) (var prefix \u003d name + "\u003d" var cookieStartIndex \u003d document.cookie.indexOf (prefix) if (cookieStartIndex \u003d\u003d -1) return null var cookieEndIndex \u003d document.cookie.indexOf
( ";", CookieStartIndex + prefix.length) if (cookieEndIndex \u003d\u003d -1) cookieEndIndex \u003d document.cookie.length return unescape (document.cookie.substring
(CookieStartIndex + prefix.length, cookieEndIndex)))

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

Принцип роботи цієї функції полягає в тому, що cookie встановлюється з явно застарілим параметром expires, в разі 1 січня 1970 року.

// name - ім'я cookie // - шлях, для якого cookie дійсно // - домен, для якого cookie дійсно function deleteCookie (name, path, domain) (if (getCookie (name)) (document.cookie \u003d name + "\u003d "+ ((path)?"; path \u003d "+ path:" ") + ((domain)?"; domain \u003d "+ domain:" ") +"; expires \u003d Thu, 01-Jan-70 00:00 : 01 GMT ")

3. Завдання cookie за допомогою Perl

Найпотужніший і гнучкий спосіб управління документами з використанням механізму cookie - за допомогою CGI-скриптів. Завдання значення cookie на Perl буде виглядати наступним чином:

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

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

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

А тепер про грусно ...

обмеження

Клієнт (браузер) має наступні обмеження для cookies:

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

Якщо обмеження 300 або 20 перевищується, то віддаляється перша за часом запис. При перевищенні ліміту обсягу в 4Кбайт коректність значення cookie страждає - відрізається шматок запису (з початку цього запису) рівний перевищенню обсягу.

У разі кешування документів, наприклад, proxy-сервером, поле Set-cookie HTTP заголовка ніколи не кешується.

Форум порталу PHP. SU