Cookies - kas, kaip ir kodėl ?
Parašė ozzWANTED 2006 rugsėjo 25 20:09:09

Cookies - kas, kaip ir kodėl ?


DUK

Klausimas: Kas yra cookie ?
Atsakymas: Tiesioginis lietuviškas vertimas butu 'sausainis', 'sausainiukas'. Arba tiesiog galite naudoti angliška tarima - kukis (daug.: kukiai).

Klausimas: Kam jis reikalingas ?
Atsakymas: Kukis reikalingas saugoti informacija nutolusiame kliente ir taip 'sekti' jusu puslapio lankytojus.

Klausimas: Kokios yra kukiu savybes (privalumai/trukumai) ?
Atsakymas:
- kukis yra išsiunchiamas kartu su kitomis HTTP antraštemis (headers), todel jis privalo buti išsiustas prieš bet kokius ar tagus.
- jis netaps matomas iki kito užkraunamo puslapio;
- kukiai turi buti ištrinami su tokiais pat parametrais, kurie buvo naudojami jiems sukurti;
- kukiu pavadinimai gali buti užsetinami kaip masyvu vardai ir jusu PHP skripte bus prieinami kaip masyvai;

Klausimas: Kaip galechiau užsetinti kuki ?
Atsakymas: Naudok PHP f-ja setcookie(); bendra f-jos sintaxe:
setcookie( string vardas [, string reikšme [, int galiojimo_laikas [, string kelias [, string domenas [, int apsaugotas ]]]]] ); Visi parametrai išskyrus pati pirmaji (kukio vardas) yra pasirinktini.

Klausimas: O kaip del kitu parametru ? Ka jie reiškia ?
Atsakymas: Kaip jau ir minejau pirmas parametras naudojamas nustatyti kukio vardui.
string reikšme: nurodo kukio reikšme. T.y. jeigu kukio vardas yra "Jonas", o jo reikšme "Petraitis", tai PHP skripte analogas butu: $Jonas = "Petraitis";
int galiojimo_laikas: nustato kukio galiojimo laika sekundemis, nuo jo nustatymo datos;
string kelias: parodo, kuriuose serverio kataloguose veiks kukis;
string domenas: tas pats kaip ir 'string kelias' tiktais nurodo galiojima (sub)domenuose, o ne kataloguose;
int apsaugotas: nustato ar kukis turetu buti užsetintas per HTTPS protokola, ar ne;


Klausimas: Gal galima butu pavyzdžiu ?
Atsakymas: Ʋinoma !

1. Kukiu užsetinimas

1.1: Papraschiausias kukio vardu "TestCookie" užsetinimas be jokios reikšmes, kurio galiojimo laikas yra 1 valanda nuo užsetinimo laiko:

setcookie("TestCookie","", time() + 3600);

1.2: Kukis vardu "kataloginis", su reikšme "sausainis", kuris galios 15 minuchiu domeno ".example.com" betkokiame subdomene, "/of_cookie/" kataloge ir bus persiustas HTTPS protokolu:

setcookie("kataloginis","kukis",time() + 900, "/of_cookie/", ".example.com", 1);

1.3: Kukio, kaip masyvo, užsetinimas su ivairiu galiojimo laiku:

setcookie("kukis[vienas]","reikšme1",time() + 3600); // 1 valanda
setcookie("kukis[du]","reikšme2", time() + 1800); // 30 minuchiu
setcookie("kukis[trys]","reikšme3", time() + 86400); // 1 para



2. Kukiu trynimas

2.1: Kukio trynimas, kuris buvo užsetintas, kaip parodyta pirmame pavyzdyje:

setcookie("TestCookie","", time() - 3600);

Atkreipkite demesi, kad norint ištrinti kuki reikia naudotis praeities laika.

2.2: Kukio trynimas, kuris užsetintas su tokiais pat parametrais, kaip ir antrame pavyzdyje:

setcookie("kataloginis","", time() - 3600, "/of_cookie/", ".example.com", 1);

2.3: Kukio, kaip masyvo elemento, trynimas:

setcookie("kukis[du]","", time() - 3600);

Klausymas: Na gerai - aš užsetinau kukius. Dabar kaip man gauti reikšmes iš tu kukiu ?
Atsakymas: Gali naudoti viena iš sekanchiu pavyzdžiu:

1: echo $TestCookie; // parodys kukio, vardu "TestCookie" reikšme

2: echo $_COOKIE["TestCookie"]; // analogas pirmajam atvejui

3: echo $HTTP_COOKIE_VARS["TestCookie"]; // tas pats kaip ir pirmais dviema atvejais

Pastaba: $_COOKIE yra palaikomas > PHP 4.1.0 versijos, $HTTP_COOKIE_VARS palaikomas nuo PHP 3 versijos.

Klausimas: Emmm... O kaip su tais "masyviniais" kukiais ?
Atsakymas: Naudok while() cikla su list() bei each() f-jomis. Paprastas pvz.:

if (isset ($cookie)) {
while (list ($name, $value) = each ($cookie))
{
echo "$name == $value
\n";
}
}
Info php.lt