Teostus
-------

Näide küpsise kasutamisest, kus veebibrauser saab serverilt koos lehega ka küpsise ning teist lehte pärides saadab tagasi ka küpsise
Küpsis sisaldab vähemalt ühte nime-väärtuse paari, mis sisaldab informatsiooni. Küpsis saadetakse esmalt serverist veebibrauserile HTTP päises ja pärast saadab veebibrauser serverile sama küpsise tagasi iga kord, kui ta teeb sinna päringu.

Küpsistel võib olla aegumistähtaeg, kui kaua veebibrauser neid alles hoiab. Aegumistähtajata küpsised kustutatakse veebibrauseri sulgemisel. Kasutajad võivad ka ise veebibrauseri seadeid muuta, et küpsiste kasutamine oleks keelatud või nad säiliksid vähem, või kustutada neid käsitsi, et säästa kettaruumi ja hoida privaatsust. Viirusetõrjeprogrammid kustutavad sageli teatud küpsised, mis võivad arvutikasutaja privaatsust vähendada.

Ajalugu
-------

Nimetus "küpsis" tuleb sarnasusest õnneküpsisega (*fortune cookie*), sest mõlemad sisaldavad peidetud informatsiooni. Internetis küpsiste kasutamise idee pärineb aastast 1994, kui programmeerija Lou Montulli töötas firmas Netscape Communications, mis arendas elektroonilise kaubanduse rakendusi. Lou ja John Giannandrea koostasid algse Netscape'i küpsise spetsifikatsiooni ning küpsiseid toetas juba samal aastal Mosaic Netscape'i versioon 0,9beta, mis tuli välja 13. oktoobril 1994. Algul kasutati küpsiseid kontrollimaks, kas Netscape'i veebilehe külastajad olid sellel lehel juba varem käinud.

Kasutusalad
-----------

### Seansi haldus

Tüüpiliselt saadab lehe esmakülastusel server veebibrauserile seansiküpsise (*session cookie*), millel on unikaalne väärtus. Kõik järgmised veebibrauseri päringud ei ole serveri jaoks uue külalise päringud, vaid sama unikaalse seansi küpsise ehk ühe kliendi päringud. Server saab meeles pidada kliendi tegevusi ning klient ei pea enam sisestama informatsiooni, mida ta on juba jaganud serveriga. Klient saab ennast sisse logida veebilehele, panna virtuaalsesse ostukorvi tooteid, muuta veebilehe keelt või muuta teistmoodi endale veebilehte isikupärasemaks kõigest ühe küpsise salvestamisega. Seansi halduses on veebibrauseril salvestatud seansiküpsis ja kõik andmed, mis on kliendiga seotud, on serveri andmebaasis. Kuna seansiküpsised tüüpiliselt ei oma aegumistähtaega ja nad unustatakse veebilehe sulgudes, siis peab ka veebiportaalidesse igal külastuskorral sisse logima.

### Isikupärastamine

Küpsiseid võib kasutada ka eelmiste külastuskordade eelistuste meelespidamiseks. Nende küpsiste aegumistähtaeg on pikem, et valitud seaded oleks alles ka pärastpoole. Näiteks sisse logides võib olla valik jäta mind meelde (remember me), mida märkides saadetakse sisse logimisel kliendile lisaks seansiküpsisele veel üks pikemaajaline küpsis, mis sisaldab infot konto identifitseerimiseks. Kuigi veebibrauseri sulgudes kaob ka seansiküpsis, jääb pikemaajaline küpsis alles ning kunagi hiljem samale lehele sattudes tunneb server kliendi ära ning logib ta automaatselt sisse.

Sageli jäetakse ka meelde kasutaja keele-eelistused, mistõttu kord veebiportaalis omale sobiva keele valinud klient võib ka järgmisetel külastustel hankida informatsiooni samas keeles. Alles saab hoida ka andmeid, milliseid foorumi teemasid klient on juba lugenud, mitu vastet soovib klient otsingufunktsiooniga saada või millist kujundust soovib klient veebilehel kasutada.

### Jälgimine

Jälitamisküpsised (*tracking cookie*) peavad tavaliselt meeles ainult veebilehe külastust. Külastusstatistikat tegevad programmid saadavad esmakordsel külastusel veebibrauserile küpsise. Iga kord lehele tagasi tulles saadab veebibrauser sama küpsise tagasi ja seetõttu teab ka jälgimisprogramm, et kasutaja on lehel juba käinud ega loe teda mitu korda uueks külastajaks. Sel moel saab külastusstatistikat tegev programm lugeda iga külalist korra ja anda adekvaatsemat infot külaliste arvu kohta ajavahemikus.

Küpsist on võimalik salvestada iga HTTP-päringu jooksul ja seetõttu saavad küpsiseid jagada ka veebilehel sisalduvad failid (pildid, JavaScript, CSS), millele teeb veebibrauser päringu. Kliendi külastatud lehekülgi on võimalik jälgida, kui kõigis nendes lehtedes sisaldub sama domeeni fail (näiteks reklaam). Reklaamifirmad (näiteks Google AdWords) saavad tänu küpsisele siduda külastatud leheküljed ühe kliendiga ja pidada tema veebiharjumuste kohta andmebaasi.

Rakendamine
-----------

### Näidispäised

Veebibrauseri pöördumine Google.ee poole

|  |  |
| --- | --- |
| 

Host www.google.ee
User-Agent Mozilla/4.0 (MSIE 6.0; Windows NT 5.1)
Keep-Alive 115
Connection keep-alive

 |  |

Google.ee vastus:

|  |  |
| --- | --- |
| 

Date Tue, 8 Dec 2010 20:35:25 GMT
Expires -1
Cache-Control private, max-age=0
Content-Type text/html; charset=UTF-8
Set-Cookie NID=41=xmsDYxVuW4\_lNKfM23bScs8-DXsq3cRDxWchipGjJzN8sX6Q\_bFsq9scXg8GFKOJXctkfvoLuX0 LSEWjY\_RbiF7kzf\_WCu9jd7zNILaenhMWATu6touxX\_8lv9RzLacS; expires=Thu, 9-Jun-2011 20:35:25 GMT; path=/; domain=.google.ee; HttpOnly
Server gws
Content-Length 4985
X-XSS-Protection 1; mode=block

 |  |

Veebibrauseri uus pöördumine Google.ee poole:

|  |  |
| --- | --- |
| 

Host www.google.ee
User-Agent Mozilla/4.0 (MSIE 6.0; Windows NT 5.1)
Keep-Alive 115
Connection keep-alive
Cookie NID=41=xmsDYxVuW4\_lNKfM23bScs8-DXsq3cRDxWchipGjJzN8sX6Q\_bFsq9scXg8GFKOJXctkfvoLuX0 LSEWjY\_RbiF7kzf\_WCu9jd7zNILaenhMWATu6touxX\_8lv9RzLacS

 |  |

Selles näites külastati esmakordselt google.ee lehte. Google.ee saatis set-cookie käsuga küpsised ning kui google.ee lehele teha järjekordne päring, saadab veebibrauser välja sama küpsise.

### Küpsise seadmine PHP-toega veebiserveris

PHP kood:

|  |  |  |
| --- | --- | --- |
|  | 

Süntaks: bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )
setcookie("TulemusiLehel", "30", time()+3600, "/~rasmus/", ".example.com", 1, 1);

 |  |

Veebibrauser saab käsu salvestada küpsis, mille nimi on "TulemusiLehel" ning väärtus on 30. See küpsis kehtib kuni Unix-ajani praegu+3600 sekundit ehk ta muutub kehtetuks ühe tunni pärast. Küpsis saadetakse välja ainult nendelt lehekülgedelt, mis asuvad domeenil example.com või tema aladomeenidelt (. märk example.com-i ees) ning mis asub kataloogis ~rasmus.

Eelviimane argument 1 näitab, et küpsist tuleks kliendile edastada ainult turvatud ühenduse (HTTPS) korral. Käsu viimane argument 1 tähendab, et küpsisele peaks pääsema ligi ainult HTTP protokolliga ja ei ole ligipääsetav skriptimiskeeltele, näiteks JavaScriptile. Kohustuslikuks argumendiks on ainult esimene, küpsise nimi.

### Küpsise seadmine JavaScriptiga

JavaScripti kood:

|  |  |  |
| --- | --- | --- |
|  | 

Süntaks: document.cookie = "name; expires; path; domain; secure";
document.cookie = "TulemusiLehel=30; expires=12/12/2010 00:00:00";

 |  |

Alternatiivid
-------------

### IP-aadress

Kuna igal HTTP käsul saadetakse serverile ka kliendi IP-aadress, siis saab klienti eristada ka ilma küpsisteta teistest päringutest. Ühte välist IP-aadressi võivad jagada aga mitu arvutit samas kohtvõrgus (näiteks korruselamu, jagatud Interneti ühendusega eramajad, klassitoad, konverentsisaalid, Wi-Fi-võrk jne), seetõttu võib server pidada samaks kliendiks ka teist klienti, kes on sama IP-aadressiga, kuigi nad on erinevate arvutite taga. Kui veebiserver teeb autentimist ainult IP-aadressi kaudu, siis võib ühe kohtvõrgu kliendi sisse logides serverisse olla ka kõik teised kohtvõrgu kliendid sisse logitud.

### URL-aadress

Server võib alguses määrata kliendile unikaalse kombinatsiooni ja lisada selle enne kliendile saatmist kombinatsiooni iga veebiaadressi lõppu. Kui klient vajutab lingile ja liigub uuele leheküljele, siis saadetakse URLiga ka unikaalne kombinatsioon ja server tunneb kliendi ära. Niimoodi säilitatakse kliendi informatsiooni aga ainult seni, kuni ta kasutab selle sama lehe siselinke. Kui ta tuleks samale lehele uuesti tagasi otsingumootori kaudu, siis ei kanna ta enam kaasas oma unikaalset kombinatsiooni ja ta loetakse esmakordseks külastajaks. Vastupidi oleks aga pärast veebilehele sisselogimist ja lehe lingi teisele kliendile saatmist ka teine klient sisse logitud sama kasutajaga.

### Varjatud vorm

Server võib alguses määrata kliendile unikaalse kombinatsiooni ja lisada selle HTML vormi (<form method="post">) elemendiks. Kui klient teeb HTTP POST käsu, siis ta saadab ka kõik vormi liikmed ära koos unikaalse kombinatsiooniga. Kuna vormi elemendid võivad olla ka peidetud, siis võib autentimine olla kliendile varjatud. Samuti ei ole ka teine klient sisse logitud, kui talle saata lehekülje aadress, sest informatsiooni ei hoita URL-is. Teistelt serveritelt tulemisel ei ole aga salvestatud kliendi andmeid.

Puudused
--------

### Puudulik autentimine

Kuna küpsised on salvestatud veebibrauserite poolt, siis saadetakse serveritele küpsiseid ainult sama veebibrauseriga külastades. Kui kasutada teist veebibrauserit või teist arvutit, siis küpsiseid ei saadeta ja klienti koheldakse kui uut külastajat. Analoogselt käsitletakse sama inimesena aga ka teisi inimesi, kes kasutavad sama veebibrauserit. Kui teise inimese arvutit või avalikku Interneti-punkti, siis võivad veebiserverid klienti ekslikult kellekski teiseks pidada.

### Küpsiste vargus

Kui Interneti-ühendus pole krüpteeritud, siis on ka sama kohtvõrgu liikmetel ligipääs teiste klientide võrguliiklusele, sealhulgas on võimalik vaadelda ka küpsiste sisu. Kui saata teise kliendi küpsis enda arvutist samale lehele, siis ei tee server küpsise-autentimise korral kahel kliendil vahet. Nii on võimalik logida ennast sisse teiste nimel. Mõned veebiportaalid (näiteks Facebook) kasutavad krüpteeritud ühendust ainult sisse logides, et kasutajanimi ja parool oleks varjatud. Kuna pärast lehel sirvides pole ühendus jõudluse pärast enam krüpteeritud, siis on ka küpsised turvamata ja võrguliiklust pealt kuulates on võimalik maskeeruda ennast teisteks kasutajateks. Eriti suur oht langeda identiteedivarguse ohvriks on krüpteerimata Wi-Fi võrkudes, aga ARP mürgitamisega (ARP spoofing) on võimalik ka traadiga ühenduse kohtvõrgus jagada soovimatult oma andmeid ja lasta nii oma küpsiseid kopeerida.

### Privaatsus

Kuna küpsiste salvestamine käib automaatselt ja enamikul veebibrauseritel on automaatselt lubatud ka kolmandal osapoolel (third-party cookies) salvestada küpsiseid, siis on võimalik kliendi Interneti külastusi jälgida varjatult. Nii võivad serverid koostada suure andmebaasi inimeste harjumustest, eelistustest ja veebilehtede külastamise ajaloost, mis rikub privaatsust ja kaotab ära Internetis anonüümsuse.

Küpsiste teavitusaknad Firefox 3.0-s
Mozilla Firefox kuni versioonini 43.0 (k.a.) sisaldab küpsiste teavitust, aga see tuleb lehitseja seadistustes eraldi sisse lülitada. Alates Firefoxi versioonist 44.0 küpsiste teavitust enam pole, kuigi eraldi küpsisehaldamise seaded on veel alles jäetud.

Vaata ka
--------

* facebook click identificator
* google click identificator
* Internetiprotokoll
* Kasutaja nõusolek ja selle vorm küpsiste paigaldamiseks kasutaja arvutisse
* en:Social media analytics

Viited
------

1. ↑  John Schwartz. Giving the Web a memory cost its users privacy. New York Times. September 4, 2001
2. ↑  "Press Release: Netscape Communications Offers New Network Navigator Free On The Internet". Web.archive.org. Originaali arhiivikoopia seisuga 7. detsember 2006. Vaadatud 22.05.2010.
3. ↑  PHP manuaal: Setcookie süntaks
4. ↑  w3schools: document.cookie näide

Välislingid
-----------

* Kuidas Interneti küpsised töötavad
* Firefoxi abileht: Küpsised

| * v
* r
Veebibrauserid |
| --- |
| 

|  |  |
| --- | --- |
| Osad | 
Allalaadimishaldur  • Küpsis  • Pistikprogramm |
| Veebistandardid | 
CSS  • DOM  • HTML  • HTML5  • JavaScript  • MathML  • SVG  • XHTML  • WebGL |
| Seotud teemad | 
Veeb  • Internetikomplekt  • Mobiilne internet  • SPDY  • HTTP  • HTTPS  • SSL/TLS  • WebSocket  • XML |

 |
| Lauaarvuti | 

|  |  |
| --- | --- |
| Geckol põhinevad | 
Firefox  • *Lotus Symphony*  • *Netscape* |
| WebKitil põhinevad | 
Konqueror  • Midori  • Safari |
| Tridentil põhinevad | 
Internet Explorer |
| Blinkil põhinevad | 
Chromium (Chrome)  • Opera |
| Tekstipõhised | 
Lynx  • w3m |
| Muud | 
Microsoft Edge |

 |