HTTP-küpsis

**Küpsis** (ka **HTTP-küpsis** või **küpsisefail**, inglise keeles *cookie*, *HTTP cookie*) on tekstikujuline andmeplokk kliendi veebibrauseris, mida saadetakse määratud domeenile iga kord, kui klient teeb sinna päringu. Nii saab server vastava kliendi päringu eristada teiste omadest ja pakkuda talle isikupärastatud andmeid. Küpsiseid võib kasutada veebilehtedele sisselogimiseks, eelistuste salvestamiseks ja ostukorvi sisu meelespidamiseks.

## Teostus

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

Google.ee vastus:

Veebibrauseri uus pöördumine Google.ee poole:

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:

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:

## 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 () 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.

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

## Välislingid
* Kuidas Interneti küpsised töötavad
* Firefoxi abileht: Küpsised