JavaScript Cookie nustatymas, gavimas ir ištrynimas
Šiame straipsnyje išmoksite kaip reikia nustatyti, gauti bei ištrinti Cookie pastelkiant JavaScript programavimo kalba. Pirmiausia apibendrinkime kaip veikia Cookie ir išnagrinėsime kiekvieną jo dalį.
Kaip veikia Cookie
Cookie yra niekas kita kaip tik mažas tekstinis failas kurį sukuria naršyklė. Joje laikoma keletas duomenų:
- reikšmė-pavadinimas kuri atstoja aktualius tam sausainiui (Cookie) nustatytus duomenis.
- baigimo laiką kuomet sausainėlis yra nebegaliojantis
- domenas ir vieta serverio kur bus siunčiama.
Tuoj pat kai tik užklaustas puslapis iš serverio su sausainėlių nustatymu yra įkeliamas į HTTP antraštę. Serverio pusėje veikiančios programos gali skaityti visus duomenis (nebūtinai tam domenui skirtus sausainėlius) kur gali būti tokie duomenys kaip, ką jums leisti žiūrėti, ko neleisti, kokie jūsų prisijungimo duomenys ar kokią puslapio spalvą jums uždėti, raudoną ar juodą.
Taigi, kiekvieną kartą kai tik aplankote kokią nors svetainę, visa informacija ateina iš sausainėlių kuri apie jus leistina. Tai kartais labai patogu, bet kartais tai gali pažeisti ir jūsų privatumą.
Taigi kaip minėjau šiame straipsnyje aptarsime būtent JavaScript Cookie valdymą kadangi JavaScript taip pat sugeba skaityti sausainėlius.
Sausainėlio kintamieji
reikšmė-pavadinimas
Kiekvienas sausainėlis turi porą kuri saugo tam tikrą informaciją. Sausainėlio pavadinimas tai jūsų privilegiją, pirmiausia ieškoma sausainėlio pavadinimo pagal kurį toliau išvedama informacija.
Jeigu norite perskaityti kokie duomenys surašyti tam tikram sausainėlio pavadimui, jums reikįtų pirmiausia susirasti to sausainėlio pavadinimą ir galėsite laisvai perskaityti kokie duomenys yra įrašyti. Taipogi kiekvienas pats sprendžia kaip turi būti surašyti duomenys į sausainėlį pagal atitinkamą pavadinimą.
Baigimosi laikas
Kiekvienas sausainėlis turi galiojančia datą kuomet jis išmetamas. Jeigu jūs nenurodysite pabaigos laiko, jis bus sunaikinamas iškarto po to kai uždarysite naršyklę. Galiojimo laikas turi būti nustatytas UTC (Grinvičo laiko juosta) laiko formatu kurį galima sukurti su Date objekto metodu toGMTString().
Domenas ir vieta serverio
Taipogi kiekvienas sausainėlis turi ir savo domeną bei vietą. Domenas praneša kurio domeno sausainėlius reikia siusti. Jeigu jūs nenustatote domeno, domenas tampa tas domenas iš kurios buvo siunčiamas sausainėlis, kai pavyzdys šioje svetainėje nenurodžius domeno jis automatiškai taptų: www.coders.lt Each cookie also has a domain and a path. The domain tells the browser to which domain the cookie should be sent.
Taigi patartina kiekvieną kartą nurodyti sausainėlio domeną, kadangi gali būti ir taip kad jei nusistatė sausainėlis automatiškai: www.coders.lt ir jei mes bandysime kokius nors atlikti veiksmus su paieska.coders.lt mums nustatytas sausainėlis papraščiausiai neveiks. Taigi geriausia nustatyti domeną būtų taip: coders.lt, tokiu atveju jūsų sausainėlis veiks ir paieska.coders.lt sub-domenuose.
Jūs negalėsite perskaityti kitų sausainėlių kad ir tarkim iš www.microsoft.com, tik coders.lt bus leidžiamas šiuo atveju.
Nurodyta vieta nurodo sausainėliui kurioje vietoje jis bus aktyvus. Jeigu jūs nurodysite tarkim cgi-bin direktoriją, o cgi-bin direktorija kaip žinia veda į / t.y. pagrindinį pusalpį, tuomet jūsų sausainėlis bus aktyvus šiame puslapyje.
document.cookie
Sausainėlis gali būti sukurtas, perskaitomas ir ištrintas su JavaScript taip pat. document.cookie gali būti skaitomas kaip kintamasis taip pat, kur bus galima gauti pavadinimą-duomenis kartu.
Jeigu norite nustatyti šiam domenui sausainėlį su pavadinimu-reikšmė 'phpcookietestas=testas' kuris baigsis po 7 dienų galite tai atlikti taip:
document.cookie = 'phpcookietestas=testas; expires=Thu, 2 Aug 2007 20:47:11 UTC; path=/'
- Pirmas reiškia pavadinimą-reikšmę ('phpcookietestas=testas')
- paliekamas tarpas su kabliataškiu kitiems duomenims
- Kuomet turi baigtis sausainėlio galiojimas ('expires=Thu, 2 Aug 2007 20:47:11 UTC')
- vėl paliekamas tarpas su kabliataškiu sekančiai informacijai
- vieta (path=/)
Sausainėlio skaitymas, rašymas, trynimas
Žemiau pateiktas kodas gali praversti kiekvienam kuris dirba su JavaScript ir nori pradėti dirbti su Cookie. Šioje funkcijoje galėsite skaityti,trinti bei sukurti sausainėlius.
function createCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } function eraseCookie(name) { createCookie(name,"",-1); }
Ši funkcija nėra sudėtinga, sunkiausia įrašyti pateikiant teisingai duomenis į sausainėlį.
Toliau pateikiamas kiekvienos eilutės aprašymas kas ką atlieka.
Funkcijos aprašymas
Funkcija createCookie()
Kai iškviečiama funkcija createCookie() turi nurodyti šiai funkcijai tris parametrus, sausainėlio pavadinimą, reikšmę ir dienų skaičių kuomet pasibaigs sausainėlio galiojimo laikas. Žemiau pateikta kaip galite panaudoti šią funkciją. Į funkciją perduodamas pavadinimas „testas“, jo reikšmė „testas“ bei galiojimo laikas 7 dienas.
createCookie('testas','testas',7)
Jeigu nurodysite dienų skaičių lygiu 0 tuomet sausainėlis susinaikins tuomet kai uždarysite našyklę. Jeigu nurodysite ne skaičių tuomet sausainėlis susinaikins iškarto.
Toliau pradedame nagrinėti funkciją bei sausainėlio sukūrimo eigą. Pirmiausia sukuriame funkciją ir priskiriame šiai funkcijai kintamuosius kurie bus perduodami į funkcija:
function createCookie(name,value,days) {
Pirmiausia ką mes matoma tai yra dienos reikšmės tikrinimas. Jeigu nėra nustatytos dienos tuomet mums nereikia atlikti matematinių veiksmų su data:
if (days) {
Jeigu vis dėl to nurodytos dienos kiek saugoti sausainėlį, tuomet gauname šios dienos datą:
var date = new Date();
Dabar gauname esantį laiką (milisekundėmis) ir ir pridedame prie nurodytų dienų (milisekundėmis). Nustatome naują kintamąjį pakeistam laikui išsaugoti taip nustatydami kada laikas pasikeis milisekundėmis:
date.setTime(date.getTime()+(days*24*60*60*1000));
Nustatome kintamąjį su pabaigos data kuomet pasibaigs sausainėlio galiojimo laikas:
var expires = "; expires="+date.toGMTString(); }
Jeigu į funkciją dienos perduotos 0 tuomet sukuriama kintamąjį expires kuriame niekas nesaugoma. T.y. kai nustatinėsime sausainėlio parametrus mes nurodysime tuščią kintamąjį, JavaScript supras kaip atvejį kad sausainėlis turi susinaikinti tuomet kai bus uždarytas naršyklės langas:
else var expires = "";
Ir galiausiai išvedame sausainėlio sukūrimą:
document.cookie = name+"="+value+expires+"; path=/"; }
Sausainėlis sėkmingai sukurtas.
Funkcija readCookie
Jeigu norite perskaityti sausainėlį, tuomet iškvieskite šią funkciją. Funkcija iškviečiama nurodžius jai vieną parametrą, t.y. sausainėlio pavadinimą. Po funkcijos iškvietimo ir panaudojimo galite pasitikrinti ar tikrai sausainėlis grąžino reikšmę, gal tiesiog sausainėlis nebuvo sukurtas, arba nenustatyta reikšmė:
var x = readCookie('testas') if (x) { [atliekama ką nors su x] }
Ši funkcija gauna parametrą ir pradeda savo darbą.
function readCookie(name) {
Mes bandysime ieškoti sausainėlio su nurodytu pavadimu su pridėtiniu kintamuoju '=' ir nustatome visą reikšmę į vieną kintamąjį nameEQ:
Išskaidome document.cookie per kabliataškį. Kintamasis ca tampa masyvas kuris laiko visus sausainėlio duomenis nustatytus šiam domenui ir vietai:
var ca = document.cookie.split(';');
Tuomet kai suskaidėme sausainėlį „keliaujame“ per masyvą:
for(var i=0;i < ca.length;i++) {
Nustatomas kintamasis c sausainėlis kurį reikia peržiūrėti:
Jei pirmasis simbolis yra tarpas tuomet jį pašaliname su substring metodu. Tęsiame tol kol pirmasis simbolis nėra tarpas:
while (c.charAt(0)==' ') c = c.substring(1,c.length);
Dabar kintamasis c su tuo pačiu pavadinimu esame sausainėlyje:
if (c.indexOf(nameEQ) == 0)
Mes radome tai ko ieškojome. Mums belieka išvesti sausainėlio duomenis, kurio dalis yra kintamajame c kuris buvo prieš tai nameEQ:
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); }
Jeigu mes neradome ko ieškojome, ar tai sausainėlis neturėjo jokių duomenų savyje, ar pats sausainėlis nebuvo sukurtas, mes grąžiname NULL:
return null; }
Funkcija eraseCookie
Sausainėlio ištrynimas labai paprastas:
eraseCookie('testas')
Funkcija iškviečiama nurodžius sausainėlio pavadinimą pagal kurį buvo nustatyti duomenys:
function eraseCookie(name) {
kai iškviečiama ši funkcija tuomet sukuriamas tas pats sausainėlis be jokių reikšmių su galiojančia diena vakar:
createCookie(name,"",-1); }
Naršyklė pamačius kad data praleista, iškarto jį ištrins.
Discussion