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