Бисквитки (cookies) (Част 1)

Бисквитките (cookies) са механизъм, чрез който сървърите съхраняват и връщат информация за клиента. Те са текстов файл, който се съхранява на клиентския компютър чрез включване на Set-Cookie хедър като част от HTTP отговора, който обикновено се генерира с CGI скрипт.

Стъпките за идентификация на потребител са:
  1. Сървърът изпраща бисквитка към браузъра (име, години, идентификационен номер и т.н.).
  2. Браузърът съхранява тази информация на клиентския компютър за бъдещо ползване.
  3. При следващо посещение в сайта, браузърът изпраща молба към уеб сървъра заедно с информацията от бисквитката и сървърът използва тази информация, за да идентифицира потребителя.
Това ни навежда на мисълта да си зададем още един въпрос, а именно въпроса за безопасността, която е от изключително значение в интернет пространството (и не само).

Информация за атаката "Междусайтов скриптинг" (Cross Site Scripting) можете да намерите на следните адреси:


Структура на бисквитката


Бисквитките обикновено се поставят в HTTP хедъра (JavaScript може да постави бисквитката директно в браузъра).
РНР скрипт, който изпраща бисквитка, всъщност изпраща хедър.

Един от начините да разгледате HTTP хедъра е: http://web-sniffer.net/

HTTP-Request-Header.png
HTTP Request Header

HTTP-Response-Header.png
HTTP Response Header

Друг начин, по който можете да разгледате HTTP хедър, е да приложите командата curl в командния ред на Ubuntu, например:

curl -I https://www.youtube.com/

http_curl.png
Изход от командата curl

Създаване, четене и изтриване на бисквитки (cookies)


РНР скрипта има достъп до бисквитките чрез глобалната променлива $_COOKIE.
Функцията, служеща за изпращане на бисквитки e setcookie ().

Синтаксисът на функцията setcookie () е:

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

Параметри на функцията:

$name- задължителен параметър. Съдържа името на бисквитката, което се съхранява в променливата $_COOKIE.

$value- незадължителен параметър. Съдържа стойността на променливата $name. Стойността ѝ се връща от глобалната променлива $_COOKIE[“име на бисквитката”]

$expire- незадължителен параметър. Срока на годност на бисквитката :). Времето закоето бисквитката се съхранява на клиентския компютър.
Ако тази стойност не е определена, трайността на бисквитката е до момента, в който браузърът се затвори. Ако браузърът е конфигуриран да съхранява бисквитки, той ще ги съхранява до датата на изтичането им.

$path- незадължителен параметър. Определя директорията, за която бисквитката е валидна. Единична наклонена черта означава, че бисквитката е валидна за всички директории.

$domain- незадължителен параметър. Определя името на домейна и трябва да съдържа най-малко две точки, за да бъде валидно. Бисквитките са валидни за хоста и домейна, който ги е създал.

$secure- незадължителен параметър. Стойността на този параметър може да е 1, което показва, че бисквитката ще бъде предадена през защитена HTTPS връзка или 0, което показва, че бисквитката ще се предаде през обикновена HTTP връзка.

$httponly- незадължителен параметър. Когато е TRUE, бисквитката е достъпна единствено през HTTP протокол. Което означава, че бисквитката няма да е достъпна при използване на скриптов език, подобно на Java Script. Тази опция е полезна за намаляване на опасността от XSS атаки (този параметър не се поддържа от всички браузъри).

Повече информация:
http://php.net и http://www.ietf.org/rfc/rfc2109.txt

Уеб протоколите и уеб сървърите поставят ограничения за броя на бисквитките от сървър до потребител.
Тестване на браузъра ви: http://browsercookielimits.squawky.net/

Създаване на бисквитки


Ще създадем две бисквитки bgcolor и textcolor, които ще имат стойност на атрибута $expire- 1час.

  1. Отворете текстовия редактор.
  2. Създайте нов документ.
  3. Дайте му наименование “create_cookie.php”.
  4. Въведете скрипта:
    <!DOCTYPE>
    
    <?php
    //Създава бисквитките
    $bgcolor = "blue";
    $textcolor = "yellow";
    setcookie("bgcolor", "$bgcolor", time()+3600, "/","", 0);
    setcookie("textcolor", "$textcolor", time()+3600, "/", "",  0);
    ?>
    
    <html>
       
    <head>
    <title>Бисквитка с PHP</title>
    <meta http-equiv="Content-Type" content="text/html"; 
    charset="UTF-8">
    </head>
       
    <body>
    
    <?php
    //Съобщенията се извеждат само, ако бисквитките са поставени 
    echo "Противоположностите се привличат." . "<br>";
    echo "За да се привлекат едноименни заряди, е необходимо" . 
    "<br>"; 
    echo "да им се предаде енергия, която да им бъде достатъчна," . 
    "<br>"; 
    echo "за да се сблъскат и от сблъсъка им" . "<br>";
    echo "да се роди нещо ново и по-красиво!" . "<br>";
    ?>
    
    </body>
      
    </html>
    

    Обърнете внимание на местоположението на бисквитките- непосредствено след тага <!DOCTYPE> (от ред 3 до ред 9).

  5. Съхранете файла.
  6. Качете го на сървъра.
  7. Тествайте в браузъра.
create_cookie.png

Достъп до бисквитките


Достъп до бисквитките можем да получим чрез глобалната променлива $_COOKIE.
  1. Отворете текстовия редактор.
  2. Създайте нов документ.
  3. Дайте му наименование “access_cookies.php”.
  4. Въведете скрипта:
    <!DOCTYPE>
    
    <?php
       //Създава бисквитките
       $name_1 = "BGcolor";
       $name_2 = "Textcolor";
       $bgcolor = "blue";
       $textcolor = "yellow";
       setcookie("$name_1", "$bgcolor", time()+3600, "/","", 0);
       setcookie("$name_2", "$textcolor", time()+3600, "/", "",  0);
       
       //Проверява дали бисквитките са създадени
       if (isset ($_COOKIE["$name_1"], $_COOKIE["$name_2"]))
    {
      //Достъп до бисквитките
         echo "Цветът на фона е " . $_COOKIE[$name_1] . "<br />" . "Цветът на текста е " . $_COOKIE[$name_2 ] . "<br />";
    }
    ?>
    
    <html>   
    <head>
    <title>Достъп до бисквитките</title>
    <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
    </head>  
    <body>
     
    <?php
    echo "<p style= \"color: blue\">Не е ли? Е, ще стане, имайте малко търпение! :)</p>";     
    ?> 
        
    </body>
    </html>
    
  5. Съхранете файла.
  6. Качете го на сървъра.
  7. Тествайте в браузъра.
access_cookies.png

Изтриване на бисквитките


Как да изтрием бисквитките? Прозвуча ми като “Как да убиеш чудовище?". :)
Просто създаваме бисквитка, като поставяме за стойност на параметъра $expire, дата, която вече е преминала.
  1. Отворете текстовия редактор.
  2. Създайте нов документ.
  3. Дайте му наименование “delete_cookies.php”.
  4. Въведете скрипта:
    <!DOCTYPE>
    
    <?php
    //Изтрива бисквитките
       setcookie("", "", time()- 60, "/","", 0);
       setcookie("", "", time()- 60, "/", "",  0);
    ?>
    
    <html>
    <head>
    <title>Изтриване на бисквитки с PHP</title>
    <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
    </head>  
    <body>
    
    <?php 
    echo "Бисквитките са премахнати.” . “<br>”;
    ?>
    
    </body>  
    </html>
    
  5. Съхранете файла.
  6. Качете го на сървъра.
  7. Тествайте в браузъра.
delete_cookies.png


sign.png

Няма коментари:

Публикуване на коментар