PHP сесия и PHP бисквитки с пример
Какво е бисквитка?
Бисквитката е малък файл с максимален размер 4KB, който уеб сървърът съхранява на клиентския компютър.
След като бъде зададена бисквитка, всички следващи заявки за страници връщат името и стойността на бисквитката.
Бисквитката може да бъде прочетена само от домейна, от който е издадена. Например набор от бисквитки, използващ домейна www.guru99.com не може да се чете от домейна career.guru99.com.
Повечето уебсайтове в интернет показват елементи от други домейни, като реклама. Домейните, обслужващи тези елементи, също могат да задават свои собствени бисквитки. Те са известни като бисквитки на трети страни.
Бисквитка, създадена от потребител, може да бъде видима само за него. Други потребители не могат да видят стойността му.
Повечето уеб браузъри имат опции за деактивиране на бисквитки, бисквитки на трети страни или и двете.
Ако случаят е такъв, тогава PHP отговаря, като предава токена на бисквитката в URL адреса.
Диаграмата, показана по-долу, илюстрира как работят бисквитките.
Тук
1) Потребител иска страница, която съхранява бисквитки
2) Сървърът задава бисквитката на компютъра на потребителя
3) Други заявки за страници от потребителя ще върнат името и стойността на бисквитката
Защо и кога да използваме бисквитки?
- Http е протокол без състояние; бисквитките ни позволяват да проследяваме състоянието на приложението, като използваме малки файлове, съхранявани на компютъра на потребителя. Пътят, по който се съхраняват бисквитките, зависи от браузъра. Internet Explorer обикновено ги съхранява в папката Temporal Internet Files.
- Персонализиране на потребителското изживяване – това се постига чрез позволяване на потребителите да избират своите предпочитания. Заявената страница, която следва, се персонализира въз основа на зададените предпочитания в бисквитките.
- Проследяване на посетените от потребителя страници
Създаване на бисквитки
Нека сега да разгледаме основния синтаксис, използван за създаване на бисквитка.
<?php setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]); ?>
ТУК,
- Php „setcookie“ е PHP функция използвани за създаване на бисквитката.
- “cookie_name” е името на бисквитката, която сървърът ще използва, когато извлича нейната стойност от променливата на масива $_COOKIE. Това е задължително.
- “cookie_value” е стойността на бисквитката и тя е задължителна
- „[време на_изтичане]“ не е задължително; може да се използва за задаване на времето за изтичане на бисквитката, като например 1 час. Времето се задава с помощта на функциите на PHP time() плюс или минус брой секунди, по-голям от 0, т.е. time() + 3600 за 1 час.
- „[cookie_path]“ не е задължително; може да се използва за задаване на пътя на бисквитката на сървъра. Наклонената черта „/“ означава, че бисквитката ще бъде достъпна за целия домейн. Поддиректориите ограничават достъпа на бисквитките до поддомейна.
- „[домейн]“ не е задължителен, може да се използва за дефиниране на йерархията за достъп до бисквитки, т.е.
www.cookiedomain.com
означава целия домейн, докатоwww.sub.cookiedomain.com
ограничава достъпа на бисквитките доwww.sub.cookiedomain.com
и неговите поддомейни. Имайте предвид, че е възможно да имате поддомейн на поддомейн, стига общият брой знаци да не надвишава 253 знака. - „[сигурно]“ не е задължително, по подразбиране е false. Използва се за определяне дали бисквитката се изпраща чрез https, ако е зададено на true, или http, ако е зададено на false.
- „[Httponly]“ не е задължително. Ако е зададено на true, тогава само скриптови езици от страна на клиента, т.е JavaСценарий няма достъп до тях.
Забележка: функцията php set cookie трябва да се изпълни преди HTML отварящия таг.
Нека сега да разгледаме пример, който използва бисквитки.
Ще създадем основна програма, която ни позволява да съхраняваме потребителското име в бисквитка, която изтича след десет секунди.
Кодът по-долу показва изпълнението на горния пример „cookies.php“.
<?php setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds echo 'the cookie has been set for 60 seconds'; ?>
Изход:
the cookie has been set for 60 seconds
Извличане на стойността на бисквитката
Създайте друг файл с име „cookies_read.php“ със следния код.
<?php print_r($_COOKIE); //output the contents of the cookie array variable ?>
Изход:
Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )
Забележка: $_COOKIE е PHP, вграден в супер глобална променлива.
Той съдържа имената и стойностите на всички зададени бисквитки.
Броят на стойностите, които
Масивът $_COOKIE може да съдържа зависи от размера на паметта, зададен в php.ini.
Стойността по подразбиране е 1GB.
Тестваме нашето приложение.
Да приемем, че сте запазили вашите PHP файлове в папка phptus.
- Стъпка 1 – отворете вашия уеб браузър и въведете URL адреса http://localhost/phptuts/cookies_read.php
Забележка: Показан е само празен масив
- Стъпка 2 – Преглед на URL адреса http://localhost/phptuts/cookies.php
- Стъпка 3 – Превключете обратно към първия раздел, след което щракнете върху бутона за опресняване
Изчакайте минута, след което щракнете отново върху бутона за опресняване. Какви резултати получихте?
Изтриване на „бисквитки“
- Ако искате да унищожите бисквитка преди изтичането на срока й, тогава задавате времето на изтичане на време, което вече е изтекло.
- Създайте нов файл с име cookie_destroy.php със следния код
<?php setcookie("user_name", "Guru99", time() - 360,'/'); ?>
- Повторете стъпки от 1 до 3 от горния раздел за извличане на стойности на бисквитки.
- Отворете URL адреса http://localhost/phptuts/cookie_destroy.php
- Превключете към URL адреса http://localhost/phptuts/cookies_read.php какви резултати показва?
Какво е сесия?
- Сесията е глобална променлива, съхранявана на сървъра.
- На всяка сесия се присвоява уникален идентификатор, който се използва за извличане на съхранени стойности.
- Всеки път, когато се създаде сесия, бисквитка, съдържаща уникалния идентификатор на сесията, се съхранява на компютъра на потребителя и се връща с всяка заявка към сървъра. Ако клиентският браузър не поддържа бисквитки, уникалният идентификатор на php сесията се показва в URL адреса
- Сесиите имат капацитета да съхраняват относително големи данни в сравнение с бисквитките.
- Стойностите на сесията се изтриват автоматично при затваряне на браузъра. Ако искате да съхранявате стойностите за постоянно, тогава трябва да ги съхранявате в базата данни.
- Точно като променливата на масива $_COOKIE, променливите на сесията се съхраняват в променливата на масива $_SESSION. Точно като бисквитките, сесията трябва да бъде стартирана преди всички HTML тагове.
Защо и кога да използваме Sessions?
- Искате да съхранявате важна информация, като потребителския идентификатор, по-сигурно на сървъра, където злонамерените потребители не могат да се противопоставят на тях.
- Искате да предавате стойности от една страница на друга.
- Искате алтернативата на бисквитките в браузъри, които не поддържат бисквитки.
- Искате да съхранявате глобалните променливи по ефективен и по-сигурен начин в сравнение с подаването им в URL адреса
- Разработвате приложение като пазарска количка, която трябва временно да съхранява информация с капацитет, по-голям от 4KB.
Създаване на сесия
За да създадете сесия, първо трябва да извикате PHP функцията session_start и след това да съхраните вашите стойности в променливата на масива $_SESSION.
Да предположим, че искаме да знаем колко пъти е била заредена страница, можем да използваме сесия, за да направим това.
Кодът по-долу показва как да създавате и извличате стойности от сесии
<?php session_start(); //start the PHP_session function if(isset($_SESSION['page_count'])) { $_SESSION['page_count'] += 1; } else { $_SESSION['page_count'] = 1; } echo 'You are visitor number ' . $_SESSION['page_count']; ?>
Изход:
You are visitor number 1
Унищожаване на сесийни променливи
Функцията session_destroy() се използва за унищожаване на всички променливи на Php сесията.
Ако искате да унищожите само един елемент от сесията, използвайте функцията unset().
Кодът по-долу илюстрира как да използвате и двата метода.
<?php session_destroy(); //destroy entire session ?>
<?php unset($_SESSION['product']); //destroy product session item ?>
Session_destroy премахва всички данни за сесията, включително бисквитките, свързани със сесията.
Unset освобождава само отделните променливи на сесията.
Други данни остават непокътнати.
Oбобщение
- Бисквитките са малки файлове, записани на компютъра на потребителя
- Бисквитките могат да се четат само от издаващия домейн
- Бисквитките могат да имат време на изтичане, ако не е зададено, тогава бисквитката изтича при затваряне на браузъра
- Сесиите са като глобални променливи, съхранявани на сървъра
- Всяка сесия получава уникален идентификационен номер, който се използва за проследяване на променливите за даден потребител.
- И бисквитките, и сесиите трябва да бъдат стартирани, преди да бъдат изпратени HTML тагове към браузъра.