Обучение в PHP - част 14 (Cookie)
Какво е cookie ?

Както вече знаете, Интернет се базира на Hypertext Transfer Protocol ( HTTP ), който е протокол без запазване на състоянието. Това означава, че след транзакцията между клиента и Web машината завърши, Web сървърът изтрива цялата информация за транзакцията.

Нека да ви обясня тези концепции на прост език. Да предположим, че потребител посещава комерсиален сайт, добавя три книги в потребителската си кошница и преди да заплати книгите, преминава в друг сайт. Трябва ли той отново да добавя трите книги в потребителската си кошница? Отговорът е ДА, тъй като споменах по-рано, че HTTP не запазва състоянието и за по-ранни действия. Това означава, че потребителя ще трябва отново да открие книгите, да ги постави в потребителската си кошница и да ги плати, преди да премине към следващия сайт. Обаче отговорът на същия въпрос мое и а е НЕ, ако сайтът поддържа cookie. И така, какво представляват cookies ?

Cookies са малки парчета от информация ( или съобщение, ако предпочитате ), които Web сървърът може да съхрани чрез Web браузърът може да съхрани на вашият диска по време на посещението ви на сайта. Web сървърът може да извлече тази информация по време на следващата ви визита на същият сайт.

Когато посещавате Web сайт, поддържащ cookes, може да ви се наложи да се регистрирате или идентифицирате в сайта, като използвате парола и друга информация. Тази информация се съхранява в малък текстов файл, чийто големина е 4 KB. Този файл съдържа информация, свързана с потребителя, като потребителско име, парола, списък със страниците, които потребителя е посетил, и датата, на която потребителя е посетил сайта за последен път.

Да кажем че търсите книга в известната онлайн книжарница Amazon. Това е сайт поддържащ cookies. Сега ще ви покажа cookie, което се съхранява на диска ви:

Ubid-main
058-3955710-9452444
amazon.com/
0
2916341376
31961269
1377043424
29456181
*
x-main
hQFiTxHUFj8mCscT@Yb5z7xsVsOFQjBf
amazon.com/0
291641376
31961269
13771432424
29456181
*
session-id
058-3442978-4900108
amazon.com/
0
1257717760
29466815
2871432720
29465430
*
session-id-time
1011427200
amazon.com/
0
1257717730
26547852
41228853
*


058-3955710-9452444 това е уникален идентификатор, който ви е бил присвоен при първото ви посещение на сайта. Сайта също така съхранява идентификатор на сесия, в случая 058-3442978-4900108, който уникално идентифицира дадена сесия по време на започването й. Както е показано на идентификатор, hQFiTxHUFj8mCscT@Yb5z7xsVsOFQjBf , също се съхранява за вътрешна обработка на сайта. Останалата част от информацията се отнася за вашият браузър.

Както можете да видите от cookie-то, информацията в него се съхранява под формата на име и стойност. Разгледайте следния ред.

Ubid-main 058-3955710-9452444

В горния код Ubid-main е името, а 058-3955710-9452444 е съответната стойност.

За какво служат cookies
След като имате вече представа какво представляват бисквитките, нека да видим каква роля играят те и как ви помагат. Нека да продължим примера, който започнахме по-рано и в който предположихме, че сте посетили онлайн книжарница и сте добавили три кники в потребителската си кошница. Списъкът от всички елементи, които сте избрали, се съхранява в cookie, което е било създадено автоматично. Можете да продължите разглеждането на сайта, след като сте добавили книги в кошницата си. Когато сте свършили с разглеждането, ще искате да платите всички елементи които сте избрали. Когато отворите потребителската си кошница, всичко ще бъе там. Правите плащането и транзакцията приключва. Просто, нали ? :)

[list]
[*]Повечето от сайтовете, които се създават сега, използват cookies. Тяхното използване е много популярно поради следните причини:

[*]За определяне колко посетители посещават даден Web сайт и колко често.

[*]За съхраняване на подробности за потребителите.

[*]За помощ на сайтове при съхраняване на предпочитанията на потребителите.

[*]За помощ на сайтове при съхраняване на предпочитанията на потребителите.

[*]За проследяване на пътя и активността на потребителя в даден Web сайт

[*]За съхранение на елементите избрани от клиентите на сайта
[/list]

Как работят cookies ?

Cookies работят по следния начин:

[list=1]
[*]Когато напишете адреса на Web сайта в браузъра си, адреса се търси, и ако се открие успешно, заявката се изпраща към Web сървъра, съхраняващ този сайт.

[*]Ако Web сървъра приеме заявката, Web браузъра проверява за наличието на cookies за този сайт.

[*]Ако се открие cookie, браузъра изпраща всички двойки име-стойност към сървъра като HTTP заявка. Освен това се изпраща срока на валидност на cookie, ако има такова и пътят. Датата показва, датата и часа, до който cookie ще бъде валидно. Пътят помага на Web сървъра да асоциира различните стойности в cookie в различните страници, които са били посетени. След като тази информация се получи от сървъра, тя се използва вътрешно от него.

[*]Ако не се открие cookie, сървъра се уведомява за отсъствието й. В този случай сървъра генерира нов идентификатор за клиента, който инициира връзката и изпраща cookie, съдържаща двойки име-стойност, към Web браузъра на клиента. След това браузъра съхранява cookie на вашата машина.[/list]

Област на действие на cookie

Както вече знаете, cookie са двойка име-стойност. Освен името и стойността има още няколко параметъра, които ви дават по-голям контрол над тях. Например, можете да контролирате периода от време, през които cookie се счита за валидни. Освен това можете да контролирате типа на информацията и параметрите на сигурността, които ще поддържа. С други думи, тези параметри дефинират областа на действие на cookie.

Параметрите определящи областта на действие на cookie са :

Дата на валидност: Този параметър дефинира валидността и времетраенето на cookie. Датата се задава в GMT формат. След като една cookie премине датата си на валидност, тя не може вече да бъде изпращана на клиента.

Стойността по подразбиране на този параметър е докато браузъра се затвори. Това означава, че cookie е валидна само докато страницата е отворена в прозореца на браузъра. В момента, когато потребителя затвори страницата, cookie става неизползваема.

Път: Този параметър се използва за да се ограничи областта на действие на cookie до определена част от сървъра. С други думи, този параметър задава всички файлове и директории на Web сървъра, за които cookie е валидна.

Стойността по подразбиране на този параметър е /, което означава, че cookie ще е достъпна до всички страници,

Домейн: Този параметър се използва за да се зададе домейна, за който е валидна cookie. Сookies могат да бъдат ограничени до определен хост, като се зададе името на хоста, например www4u.search.bg. Сookies могат да се направят валидни за цял домейн, като се зададе като стойност името на домейна, например .search.bg.

Стойността по подразбиране на параметъра домейн е името на сървъра, който е създал cookie на диска на клиента. Тази стойност се генерира автоматично.

Сигурност: Този параметър подсигурява, че конфиденциалните данни, съхранени в cookie, ще са защитени по време на предаването от Web сървъра към клиентската машина. Чрез активирането на този метод се използва подсигурен канал, например Secure Hypertext Transfer Protocol ( SHTTP ), за обмяна на cookie.

По подразбиране параметъра сигурност има стойност disabled. При това всички данни и cookie се обменят при комуникацията, без значение, дали каналът е подсигурен или не.

Трябва да запомните, че името и стойността на cookie са задължителни при тяхната дефиниция. Останалите параметри, дата на валидност, домейн, сигурност и път – са незадължителни.

Ограничения при използването на cookie

Тъй като cookie могат да съдържат поверителна информация, като потребителско име и парола, има определени ограничения при използването им. Тези ограничения са:

Максимален размер на cookie е 4 KB. Това е така, защото cookie се съхранява на диска на потребителя. Ако размерът на ж е голям е възможно cookie от различните сайтове, които потребителя посещава да запълнят диска му.

Един сървър не може да съхранява повече от 20 cookie на клиентския компютър. Това е отново застраховка, че Web сървъра няма да запълни диска на потребителя.

Браузърът на клиента може да съхранява максимум 300 cookieс.

Само Web сървър, който е изпратил cookie, може да чете данните, съхранени в нея. Въпреки, че всички cookie са съхранени в една и съща папка, един Web сървър не може да прочете cookies, които са създадени на друг Web сървър или домейн

Реализиране не cookie чрез PHP
Реализацията на cookie в PHP е много проста. Това е, защото поддръжката им е напълно вградена в PHP. Например cookie се разглеждат като глобални променливи и са достъпни навсякъде в скрипта. Също така, те са достъпни и като обикновени променливи. В тази секция ще се запознаете с различни аспекти на използването на cookie. Тези аспекти са:

Създаване на cookie

Използване на cookie

Използване на cookie с множество стойности

Изтриване на cookie

Създаване на cookie
За да създадете cookie, трябва да използвате следните три функции:

setcookie()

time()

mktime()

Функцията setcookie()

Можете да използвате cookie в PHP, като използвате функцията setcookie(). Web сървърът използва тази функция, за да създаде cookie и да я изпрати към клиентската машина.

Ако използвате функцията setcookie() за да създадете cookie, ще трябва да я извикате преди етикета <html> и <head>. В противен случай ще получите съобщение за грешка. Това е така, защото cookie трябва да бъдат изпратени преди HTTP заглавието по време на връзката. Логиката в това е, че cookie се изпращат като част от HTTP заглавието. Така че не могат да бъдат зададени, след като заглавието е вече изпратено.

Функцията има следния синтаксис:

setcookie ( string име, string стойност, int валидност, string път, string домейн, int сигурност );

Както виждате от горния синтаксис, функцията setcookie() приема шест параметъра. Те са:

Име: Този аргумент задава името на променливата, която ще съдържа съответната стойност в двойката име-стойност. Това е глобална променлива. Като резултат, тази променлива е достъпна в следващите скриптове на PHP

Стойност: Този аргумент автоматично задава стойността на променливата, зададена от аргумента име.

Валидност: Този аргумент задава времето, след което cookie ще се разглежда като неизползваемо. Стойността на този аргумент се задава в Гринуичко време. Както споменах по-рано, ако не се зададе стойност на този параметър, една cookie се счита за валидна, докато прозореца на браузъра на клиента е отворен. При затваряне на прозореца на браузъра cookie става невалидно.

Път: Този аргумент, както разбрахте по-рано, задава йерархията на файлове и директории на Web сървъра, за които важи cookie. Стойността по подразбиране на този аргумент е /. В резултат на това, ако не зададете стойност на параметъра път на функцията setcookie(), cookie се счита за валидна на всички файлове и директории на Web сървъра. Но ако зададете път, cookie ще е валидно само за тези файлове и поддиректории, които се намират в зададената директория.

Домейн: Този аргумент се използва за задаване на името на хоста или домейна, за които cookie е валидна. Ако не се зададе стойност на този аргумент, хостът, който е създал cookie, се счита за стойност по подразбиране на аргумента.

Сигурност: Този аргумент определя, дали cookie ще се предава по подсигурен канал. Ако не е зададена стойност за този аргумент, се използва обикновен канал за предаване на cookies. Но ако стойността на този аргумент е 1, cookie се предават с помоща на портокола HTTPS, който реализира сигурността на транзакцията в Интернет.

Всички аргументи с изключение име на функцията setcookie() са незадължителни. Освен параметрите валидност и сигурност, които са целочислени, всички други аргументи могат да се предадът чрез задаване на „“ ( празен низ ). За да пропуснете аргумента валидност и сигурност, задайте стойност 0.

За да създадем cookie, ще трябва да използваме още две функции – time() и mktime().

Функцията time() и mktime()

Можете да използвате функцията time() и mktime(), за да зададете валидност на cookie.

Функцията time() се използва за намиране на текущото време. Тя връща времето в секунди. Функцията има следния синтаксис:

int time();

Функцията mktime() от друга страна, приема съставните части на времето като часове, минути, секунди, месец и година като параметри и превръща тази информация в секунди. Функцията има следния синтаксис:

int mktime ( int час, int минути, int секунди, int месец, int година );

В горния синтаксис, както можете да се досетите от имената на променливите, час приема целочислена стойност, която задава броя на часовете. Аналогично, минутата и секундата задават съответно броя на минутите и секундите. Аргумента месец, задава съответния месец, а аргумента година задава годината.

След като се запознахте със всички функции, които се използва за създаване на cookie, разгледайте следния код:

<?php
$name = „MyCookie“;
$value = „This is my first cookie“;
$expiry = mktime(0, 0, 0, 7, 1, 2005);
$domain = „localhost, localdomain“;
$setcookie ( $name, $value, $expiry, /, $domain, 0 ) ;
?>
<html>
<head>
<title> Проверка на cookie </title>
</head>
<body>
<br> <br> <br>
<h1 align= center> Cookie е създаден успешно ! </h1>
</body>
</html>


горния код се създава cookie с име MyCookie. Тъй като стойността на аргумента $value е This is my first cookie ! , този текс ще бъде съхранен в cookie. Валидността на cookie се определя от променливата $expiry, която е mktime(0, 0, 0, 7, 1, 2005), koeто означава, ще cookie ще е валидна до полунощ на 1.07.2005. Сookie има достъп до цялата йерархия на от файлове и папки на Web сървъра, тъй като пътят на cookie е зададен като / във функцията set cookie ().

Използване на cookies

При работата с cookies в PHP, след като сте създали cookies, най-важният факт, който трябва да запомните, е че не можете едновременно да създавате и използвате cookies. След като създадете , cookies, трябва да презаредите Web страницата, преди да можете да я използвате.

Разгледайте следния код:

[
[<?php
if (!(isset($kookies)))
{
$pagecount = 0;
setcookies („kookie“, $pagecount );
echo „ <center> За първи път посещавате страницата
тази сесия </center>“;
echo „<center> Cookies е създадена и съхранена на
вашия компютър </center>“;
}
else
{
$pagecount = ++ $кookies;
setcookies („kookie“, $pagecount, time() - 10 );
setcookies ( „kookie“, $pagecount );
echo „<center>Брои посещения : <b>“ .
$kookie. “</b></center>“;
?>
<html>
<body>
<center>Бутона Refresh ще опресни страницата и ще увеличи
брояча! :-) </center>
</body>
</html>


В горния код функцията isset() се използва, за да се определи дали cookies с име kookie е създадено или не. Ако такова не е било създадено на променливата $pagecounter се присвоява стойност 0. Същата променлива се използва и за създаване на стойността на cookies. Също така се появяват и съобщенията За първи път посещавате страницата тази сесия и Cookies е създадена и съхранена на вашия компютър.

От друга страна, ако това не е първият път, който посещавате страницата, променливата pagecount се увеличава с помощта на реда $pagecount = ++ $кookies;. След това стойността на cookie се запазва отново и показва съобщение, указващо броя на посещенията на страницата. При всяко опресняване на страницата, броя се увеличава с 1.





Можете да използвате вградената в PHP функция header() за да намалите количеството на горния код. Разгледайте следния фрагмент. Той се използва за създаване на cookie и за презареждане на страницата.

<?php
if (!(isset($kookie_new)))
setcookie („kookie_new“, „A short Cut“);
header ( „Location : $PHP_SELF?kookie_new = 1“ );
?>


В горния код функцията header() се използва, за да се изпрати низ string като част от HTTP заглавието. Низът Location който е използван горе, пренасочва браузъра към HTTP страница. Чрез задаването на адреса PHP_SELF текущата страница автоматично ще се отвори повторно.

Можете също така да използвате функцията header() и низа Location за да пренасочите браузъра към друга HTML страница. Разгледайте долния код за да разберете това.

<?php
if
(!(isset($kookie_new)))
setcookie(„kookie_new“, „A short Cut“);
header ( „Location : test.html“ );
exit;
?>



След като успешно сте създали cookies, вие можете да ги използвате чрез следните методи:

Като използвате името на cookie като име на променлива. Когато се опитвате да използвате cookie в PHP, се създава променлива с името на cookie. След това името на променливата може да се използва в скриптовете. Като резултат от това, можете или да презаредите цялата страница, или да заредите друга страница, която да използва cookie с име My_cookie. Тогава можете да използвате името на cookie като име на променлива в скриптовете последния начин:

echo „My_cookie“;

Използвайки $HTTP_COOKIE_VARS [„име_на_cookie“]. Отново променливата се създава по подразбиране в PHP, като се използва имео на cookie и се съхранява в глобален масив като HTTP_COOKIE_VARS [„име_на_cookie“]. Едно предимство на използването на глобалния масив e, че той помага да се направи разлика между различните cookies на база на техния източник на създаване, дори, ако те имат еднакви имена. Можете да използвате глобалния масив във вашите скриптове по следния начин:

echo „HTTP_COOKIE_VARS [„My_cookie“]“;

Cookies с множество стойности

Както можете да предположите от името, cookies, които могат да съхраняват повече от една стойност, се наричат cookies с множество стойности. Тези cookies могат да са ви много полезни. Ако си спомните от по-рано, броят на cookies, които могат да се съхраняват от Web сървъра на клиентския компютър, може да са максимум 20 ! Затова, вместо да се създават множество cookies, когато потребителя пазарува, и ненужно да се заема диска на компютъра, можете да използвате cookiess с множество стойности.

За да използвате cookies с множество стойности, трябва да зададете, че cookies е масив. Като резултат, всяка информация, която трябва да съхраните в една cookie, ще бъде съхранена като елемент на този масив. Разгледайте следващия код, за да видите, как можете да работите с cookies с множество стойности

<?php
$gmtseconds = time();
id ( isset ($kookie ) )
{
$pagecount = ++ $kookie [0];
setcookie („kookie[0]“, $pagecount, $gmtseconds + 60);
setcookie („kookie“, $kookie, $gmtseconds + 60 );
setcookie („kookie“, $gmtseconds, $gmtseconds + 60 );
echo „Здравей „ . $kookie . „! <br>“;
if ($kookie == 1)
{
echo „За първи път посещавате тази страница! <br>“;
}
else
{
echo „Посещавали сте тази страница „ . $kookie[0] . „пъти <br>“;
echo „За последен път сте разглеждали тази страница преди“.( $gmtseconds - $kookie). „секунди“;
}
exit;
}
else
{
if ( isset ( $name ))
{
$pagecount = 0 ;
setcookie („kookie[0]“, $pagecount, $gmtseconds + 60);
setcookie („kookie“, $kookie, $gmtseconds + 60 );
setcookie („kookie“, $gmtseconds, $gmtseconds + 60 );
echo „Cookies са създадени. Опреснете страницата, за да видите какво ще стане.“;
exit;
}
}
?>


В горния код cookie наречено kookie е с множество стойности. Първият елемент kookie[0] на тази cookie съдържа броя посещения на страницата с помоща на променливата $pagecount. Следващия елемент на тази cookie се нарича kookie и съдържа името на потребителя. Третия елемент, kookie, съдържа времето на последното посещение на страницата.

Когато посетите за първи път страницата, скриптът проверява дали cookie е била създадена. След като посещавате страницата за първи път, cookie няма да е създадена. В резултат на това скриптът ще създаде cookie ( kookie[0] ) и ще запише името ви в cookie kookie и времето на посещението ви в kookie. След това ще се изведе съобщението Cookieса създадени ! Опреснете страницата за да видите какво ще стане.

След като опресните страницата скриптът се изпълнява отново. Броячът се увеличава с помоща на реда $pagecount = ++ $kookie [0]; и новите стойности се записват в масив. Тъй като сега стойността на променливата $pagecount = 1, ще се изведе съобщението За първи път посещавате тази страница.

В случай че сте посетили страницата няколко пъти, ще се изведе съобщението Посещавате тази страница < число > пъти., където < число > е стойността съхранена в kookie[0] . Показва се и друго съобщение, За полседен път сте разгледали тази страница преди < време > секунди. Тук < секунди > е стойността, съхранена в kookie.





Съответния HTML код, който извиква скрипта cookie2.php, е следният:

<html>
<body>
<form name=“nameform“ method=“Get“ action=“cookie2.php“>
<b>Име</b>
<input type=“text“ name=“name“>
<input type=“submit“ name=“Submit“ value=“ Влез „>
</body>
</html>


Горния HTML код генерира една много проста HTML форма, която съдържа етикета Име, текстово поле за въвеждане и бутон Влез. Когато въведете име в полето Име и натиснете бутона Влез, се изпълнява скриптът cookie2.php. Този скрипт, както обясних по-рано, обработва информацията от формата

Остава една подробност при работата с cookies - изтриването на cookies. В следващата секция ще видите как можете да направите това.

Изтриване на cookies

След като cookie е изиграла ролята си и вече не се нуждаете от нея, можете да я изтриете. PHP не предоставя отделна функция за тази цел. Извикайте функцията setcookie само с името на cookie, за да я изтриете. Синтаксисът за изтриване е:

setcookie ( „име_на_cookie“ );

Така, че ако искате да изтрието cookie с име kookie, можете да я изтриете чрез следния ред:

setcookie ( „kookie“ );

Едно много важно нещо за изтриването на cookies в PHP, което трябва да знаете и да помните. Ако искате да създадете cookie с име, което вече съществува, първо трябва да я създадете с новата стойност и едва тогава да изтриете старата cookie. Това означава, че ако трябва да създадете cookie с име kookie, която вече съществува, първо ще трябва да напишете следни ред

setcookie („kookie“, „ New cookie“);

Едва тогава след като сте променили стойността на cookie, можете да изтриете cookie чрез:

setcookie („kookie“);






/ Трябва да сте регистриран за да напишете коментар /