e-gradiva     HTML CSS JavaScript Načrtovanje    
  logotip  
SERŠ Maribor Iskanje Primeri

Uporaba piškotkov

Piškotki omogočajo izdelavo močnih mehanizmov za razvoj spletnih aplikacij ali za njihovo uporabo programom CGI. V kolikor se podatke pošilja strežniku, je z obdelavo podatkov obremenjen strežnik, manj pa brskalnik.

JavaScript pa lahko uporablja prednosti tehnologije piškotkov, lahko jih prebere in jih spreminja lokalno tako, da zmanjšuje ali odpravi potrebo po programih CGI. Tako brskalnik opravi več dela in je zato strežnik manj obremenjen.

Piškotke lahko nastavi že strežnik, ko pošlje izbrano stran. To stori s pomočjo določila Set-Cookie v opisu, ki spremlja poslano datoteko. Tak opis običajno vsebuje podatke o vrsti in dolžini datoteke, uporabljeni kodni tabeli, lahko pa vsebuje tudi piškotke.

Set-Cookie: opis piškotka

Piškotek je lahko zapisan tudi v glavi same datoteke HTML, kar velja tudi za druge podatke, ki jih lahko pošlje strežnik v spremljajočem opisu datoteke. Piškotek v glavo datoteke HTML dodamo s pomočjo značke meta:

<meta http-equiv="Set-Cookie" content="opis piškotka" />

Piškotek pa si lahko nastavimo tudi z JavaScriptom. Ob določenem dogodku (ko uporabnik izpolni obrazec, klikne na sliko, ali kaj podobnega), se izvede naslednji ukaz:

document.cookie = "opis piškotka"

Lastnost document.cookie se na prvi pogled obnaša malo nenavadno. Če se definira najprej en piškotek, nato pa še drugega, se prvega s tem ne izgubi. Prirejanje vrednosti tej lastnosti namreč ni običajno prirejanje, pač pa pomeni definicijo novega piškotka, ki ima za stranski učinek spremembo vrednosti lastnosti.

Vrednost lastnosti document.cookie je niz, ki vsebuje zaporedje imen in vrednosti vseh pripadajočih še veljavnih piškotkov v spodnji obliki. Druge lastnosti piškotkov so nam torej skrite. Če nas zanima vrednost določenega piškotka, moramo v tem nizu poiskati ustrezno ime in izluščiti vrednost, ki sledi.

"ime_1=vrednost_1; ime_2=vrednost_2; ... ime_n=vrednost_n"

Zbirka funkcij za lažje delo s piškotki

Kot smo videli, vse delo s piškotki v JavaScriptu poteka preko lastnosti document.cookie. Piškotek nastavimo tako, da tej lastnosti priredimo ustrezen opis, vrednost določenega piškotka pa z nekaj truda spet dobimo iz vrednosti te lastnosti. Spodaj je zbranih nekaj funkcij za preprostejše delo s piškotki.

S funkcijo setCookie lahko nastavimo piškotek. Funkcija sprejme kar nekaj parametrov, od katerih sta obvezna samo prva dva (ime in vrednost). Parameter rok mora biti (če ga podamo) predmet razreda Date, parametra pot in domena sta niza, parameter varno pa logična vrednost.

function setCookie(ime, vrednost, rok, pot, domena, varno)
{
   document.cookie =
      ime + "=" + encodeURIComponent(vrednost) +
      ((rok) ? "; expires=" + rok.toUTCString() : "") +
      ((pot) ? "; path=" + pot : "") +
      ((domena) ? "; domain=" + domena : "") +
      ((varno) ? "; secure" : "")
}

S funkcijo deleteCookie lahko piškotek zbrišemo. Funkcija ima en obvezen parameter (ime), ki določa, kateri piškotek želimo zbrisati. Parametra pot in domena morata imeti enakii vrednosti kot takrat, ko smo piškotek nastavili. function deleteCookie(ime, pot, domena)

{
   document.cookie =
      ime + "=" +
      "; expires=Thu, 01-Jan-70 00:00:01 GMT" +
      ((pot) ? "; path=" + pot : "") +
      ((domena) ? "; domain=" + domena : "")
}

S funkcijo getCookie pa si delo s piškotki resnično olajšamo. Funkcija namreč poišče in vrne vrednost piškotka z danim imenom, pri čemer ima kar precej dela, saj je vrednost piškotka zapisana nekje v nizu document.cookie.

function getCookie(ime)
{
   ime += "="
   var dc = document.cookie
   var start = dc.indexOf("; " + ime)
   if (start >= 0) start += 2
   else {
      start = dc.indexOf(ime)
      if (start != 0) return null
   }
   start += ime.length
   var konec = dc.indexOf(";", start)
   if (konec == -1) konec = dc.length
   return decodeURIComponent(dc.substring(start, konec))
}

Pri nastavljanju veljavnosti piškotka bo v precejšnjo pomoč funkcija afterSomeDays, ki sestavi in vrne datum, kakršen bo čez nekaj dni (število dni je parameter).

function afterSomeDays(dnevi)
{
   var datum = new Date()
   datum.setTime(datum.getTime() + dnevi * 86400000)
   return datum
}

Vse prikazane funkcije so zapisane na datoteki piskotki.js, ki jo samo vključimo v svoj dokument HTML, če katero od teh funkcij potrebujemo. To datoteko uporabljamo tudi v primerih, ki sledijo.

Primeri:

Čeprav se zdi, da nam uporaba piškotkov reši marsikateri problem, je potrebno dobro premisliti, ali naj jih uporabimo. Pri njihovi uporabi nastopita dve težavi. Uporabnik lahko v svojem brskalniku izklopi možnost dela s piškotki (kako se to naredi, je odvisno od brskalnika). Nastavitev piškotka v takem brskalniku nima nobenega učinka. Brskalniki imajo običajno omejen prostor za shranjevanje piškotkov. Poleg tega omejujejo še skupno število piškotkov, dolžino piškotka in število piškotkov na posamezno domeno.

SERŠ Maribor : Strokovna gimnazija : 2004 : Rok Kožuh