Cookie

**HTTP cookie**, također i **cookie** ili **kolačić** je jednostavna tekstualna datoteka koja se pohranjuje u pregledniku dok korisnik pregledava neki internetski site. Kada korisnik u budućnosti pregledava taj isti site, site može "izvući" ili dohvatiti podatke koji su pohranjeni u kolačiću, kako bi bio obaviješten o prethodnoj korisnikovoj aktivnosti. Kolačići mogu sadržavati informacije o tome koje je stranice korisnik posjetio, podatke o prijavi, pa i koje je gumbe korisnik kliknuo. Ovi podaci mogu ostati u kolačiću mjesecima, čak i godinama.

Kolačići se katkad miješaju s programima - no oni su samo komadić podataka - i sami ne mogu ništa uraditi. Ne mogu sadržavati viruse niti instalirati maliciozni softver na kompjuteru domaćinu. Međutim, kolačići za praćenje (*tracking cookies*) i posebno kolačići trećih strana često se koriste kao način da se načine dugoročni zapisi o korisnikovoj povijesti surfanja.

Ostale vrste kolačića odrađuju funkcije nužne za moderan Web. Možda su najvažniji autentifikacijski kolačići, pomoću kojih server zna je li korisnik ulogiran i ne. Također zna i pod kojim je računom korisnik ulogiran. Sigurnost ove vrste kolačića uglavnom ovisi o sigurnosti internetskog sitea koji šalje kolačić, korisnikovom pregledniku, te o tome jesu li podaci u kolačiću šifrirani (enkriptirani). Ako je sigurnost niska, haker može pročitati podatke u kolačiću, pa ih može iskoristiti tako da dobije pristup korisnikovim podacima, ili se može ulogirati na site pod korisnikovim imenom i lozinkom.

## Vrste kolačića
### Sesijski kolačić
Sesijski kolačić postoji u privremenoj memoriji dok korisnik pregledava i navigira kroz site. Nastaje kada prilikom stvaranja kolačića nije određen datum njegova isteka. Internetski preglednici obično izbrišu sesijski kolačić kada ih korisnik zatvori.

### Trajni kolačić
Trajni kolačić, kao što im i ime govori, po trajanju "nadmašuje" onaj sesijski. Ako kolačić ima svoj rok trajanja (Max-Age) podešen na 1 godinu, tada bi se unutar godinu dana serveru slala izvorna vrijednost u kolačiću, svaki put kada bi korisnik posjetio server. Ovo se može koristiti za snimanje važnih djelića informacija poput toga kako je korisnik izvorno dospio na site. Zbog ovog razloga zovu se i kolačići za praćenje (*tracking cookies*).

### HTTPS kolačić
HTTPS kolačić može se koristiti samo na šifriranim HTTPS stranicama. Sigurniji je od običnog kolačića (*secure cookie* - sigurnosni kolačić) i otežava njegovu "krađu". (Vidi sljedeći podnaslov.)

### HttpOnly
Vrstu kolačića pod imenom HttpOnly podržava većina modernih preglednika. Sesijski HttpOnly kolačić koristi se samo prilikom prijenosa HTTP (ili HTTPS) zahtjeva. Na taj način zabranjuje pristup od strane ne-HTTP API-ja (kao što je JavaScript). Ova zabrana umanjuje, no ne eliminira u potpunosti, problem "krađe kolačića" preko *[[cross-site scripting]]*-a (XSS). Riječ je o sigurnosnoj rupi koju haker može iskoristiti tako što ubaci malicioznu skriptu na neku internetsku stranicu koju korisnici posjećuju. Tako se može desiti i krađa kolačića.

### Kolačići trećih strana
Kolačići prve strane su kolačići podešeni s istom domenom (ili pod-domenom) koja je prikazana na adresnoj traci internetskog preglednika. S kolačićima trećih strana je suprotno - podešeni su s domenama drukčijim od one koju možete vidjeti u adresnoj traci.

Internetske stranice mogu imati sadržaj s domene neke treće strane, npr. oglas koji pokreće `www.reklame.com` Opcije u većini modernih preglednika omogućuju blokiranje kolačića trećih strana.

Uzmimo jedan primjer. Pretpostavimo da je korisnik posjetio site `www.primjer1.com` koji ima reklamu - i ta reklama postavlja kolačić s domenom `ad.foxytracking.com`. Kada korisnik kasnije posjeti `www.primjer2.com`, druga reklama može postaviti drugi kolačić s domenom `ad.foxytracking.com`. Konačno, oba kolačića bit će poslana oglašivaču prilikom učitavanja reklama ili prilikom posjećivanja njegovog internetskog sitea. Oglašivač ove kolačiće može koristiti u svrhu izgrađivanja povijesti surfanja korisnika preko svih siteova na kojima oglašivač ima "trag".

### Zombijevski kolačići
To su kolačići koji se ponovno automatski kreiraju nakon što ih korisnik izbriše, a što se može postići skriptom koja sprema sadržaj kolačića i na druge lokacije.

## Namjena
### Upravljanje sesijama
Kolačići se mogu koristiti za održavanje podataka povezanih s korisnikom. Omogućivanje korisniku da se prijavi na internetski site je primjer česte primjene kolačića. To radi tako što server prvo pošalje kolačić sa jedinstvenim sesijskim identifikatorom. Korisnik se onda prijavi s popunjenim podacima, internetska aplikacija provodi autentifikaciju sesije i dopušta korisniku pristup servisima.

Kolačići su također i način da se implementira "košarica za kupnju" - virtualni uređaj u koji korisnici mogu pohranjivati popis stvari koje žele kupiti. Aplikacije tih košarica obično spremaju sadržaj košarice u serverovu databazu, umjesto u sam kolačić. Server šalje kolačić s jedinstvenim sesijskim identifikatorom. Internetski preglednik će sesijski identifikator slati natrag sa svakim kasnijim posjetom.

### Personalizacija
Kolačići se mogu koristiti za pamćenje informacija o korisniku koji je posjetio internetski site. Ti se podaci mogu iskoristiti da se u budućnosti prikaže neki relavantan, korisniku prilagođen sadržaj. Tako server može poslati kolačić koji sadržava korisničko ime korišteno zadnji put tijekom prijave, tako da polje s imenom može biti popunjeno u budućim posjetima.

Brojni internetski siteovi koriste kolačiće za personalizaciju - koja bi odgovarala korisnikovim postavkama i ukusu. Podaci o postavkama se mogu unijeti preko neke web forme te ih se poslati serveru. Server enkodira postavke u kolačiću i šalje ga natrag pregledniku. Ovako, svaki put kada korisnik pristupi stranici, serveru se šalje kolačić gdje su spremljene postavke, te može personalizirati stranicu u skladu s istima. Na primjer, Wikipedija omogućuje prijavljenim korisnicima da odaberu *skin* (prilagođeno grafičko sučelje) koji im se najviše sviđa; u prošlosti je Google dopuštao korisnicima, pa čak i onim neprijavljenima, da odrede koliko rezultata potrage po stranici žele vidjeti.

### Praćenje
Kolačići za praćenje mogu se koristiti za praćenje korisnikovog surfanja. Ovo se djelomično uspješno može uraditi korištenjem IP adrese kompjutera s kojeg korisnik pristupa, no kolačići omogućuju veću preciznost. Evo kako mehanizam funkcionira:
# Ako korisnik pošalje zahtjev stranici kakvog internetskog sitea, ali njegov zahtjev ne sadrži kolačić, server pretpostavlja da je ovo prva stranica koju je korisnik posjetio; server potom stvara slučajni slijed znakova i šalje ih kao kolačić
# Nakon ovoga, preglednik će serveru automatski slati kolačić svaki put kada se pošalje zahtjev za novu stranicu sitea; server šalje stanicu, te spremi URL tražene stranice, datum/vrijeme zahtjeva, i kolačić u log (zapisnu) datoteku.

## Implementacija
Kao što je prije spomenuto, kolačići su proizvoljni dijelovi podataka koje odabire server i šalje pregledniku, a preglednik ih nepromijenjene vraća serveru. Bez kolačića, svako bi dohvaćanje stranice ili neke njezine komponente bio izoliran događaj, uglavnom nepovezan za svim drugim pregledima stranica istog sitea.

Od preglednika se očekuje da može spremiti barem 300 kolačića velikih 4 kb, te barem 20 kolačića istoga servera ili domene.

### Postavljanje kolačića
Preglednik zahtijeva stranicu od servera slanjem obično kratkog teksta koji se naziva HTTP zahtjev. Na primjer, kako bi korisnik pristupio stranici , preglednik se spoji na server , te mu šalje zahtjev koji izgleda poput ovoga:

Server odgovara slanjem zahtijevane stranice kojem prethodi sličan paketić s tekstom, koji se zove HTTP odgovor. Paketić može sadržavati linije u kojima se traži od preglednika da pohrani kolačić.

Server šalje linije stavke `Set-Cookie` samo ako želi da preglednik pohrani kolačiće. `Set-Cookie` je uputa pregledniku da pohrani kolačić te da ga šalje natrag u budućim zahtjevima serveru. Uputa je podložna atributu koji određuje "rok trajanja" kolačića.
Primjer: preglednik zahtijeva stranicu  tako što serveru www.primjer.org šalje zahtjev poput ovog:

Ovo je zahtjev za drugom - drugačijom stranicom od istog servera, i razlikuje se od prvog zahtjeva po tome što sadrži liniju koju je server prethodno poslao pregledniku. Na ovaj način, server zna da je ovaj zahtjev povezan s prijašnjim. Server potom odgovara slanjem zahtijevane stranice i ponekad također šalje još kolačića.

Vrijednost kolačića može izmijeniti server slanjem nove linije - `Set-Cookie: name=newvalue` u odgovoru na zahtjev. Preglednik zatim jednostavno zamijeni staru vrijednost s novom.

U slučaju da internetski preglednik to podržava, kolačić, osim servera, može postaviti i skripta - napisana u programskom jeziku JavaScript. U JavaScriptu se za ovu svrhu koristi objekt `document.cookie`. Npr., `document.cookie = "temperatura=20"` stvara kolačić imena `temperatura` i vrijednosti `20`.

## Postavke u preglednicima
Moderni preglednici redovito podržavaju kolačiće, ali i dopuštaju svojim korisnicima da ih onemoguće - često radi privatnosti. Dakle, najčešće opcije u vezi kolačića su:
# Kompletno onemogućavanje ili dopuštanje kolačića - tako da se uvijek blokiraju ili prihvaćaju.
# Katkad, *cookie manager* koji dopušta korisnicima uvid u kolačiće i selektivno brisanje onih što su trenutno pohranjeni u pregledniku.

Većina preglednika omogućuje istovremeno brisanje ne samo kolačića, već i lozinki, fraza korištenih u pretragama (tipa fraze utipkane na Googleu) i slično.

Međutim, valja naglasiti da onemogućavanje svih kolačića uvelike smanjuje funkcionalnost većine stranica, te se ona obično svede na minimum.
 
### Mozilla Firefox
U novijim verzijama Mozille Firefox postavke u vezi kolačića mogu se naći na kartici Privacy, u odjeljku History. One su sljedeće:
* Accept cookies from site - omogućuje kolačiće
** Accept third-party cookies - prihvaća kolačiće trećih strana
* Keep until ... - moguće je odrediti dokad zadržati kolačiće, npr. dok je Firefox otvoren

Postoji i gumb Exceptions... (engl. iznimke) na kojima je moguće navesti koje će kolačiće Firefox uvijek prihvaćati ili pak uvijek blokirati. Postoji već definiran popis blokiranih kolačića, koji imaju veze sa zlonamjernih internetskim stranicama.

### Internet Explorer
U Internet Exploreru pod Internet Options postoji kartica Privacy, sa klizačem kojim se može odrediti kako će preglednik postupati sa kolačićima. Postoji 6 razina, a navest ćemo ih počevši od najstrože do najliberalnije.

* Block All Cookies - blokira sve kolačiće, a one koji se već nalaze na kompjuteru siteovi ne mogu pročitati
* High - visoka sigurnost
* Medium High - srednje visoka sigurnost
* Medium Low - niža srednja sigurnost
* Low - niska sigurnost
* Allow All Cookies - prihvaća sve kolačiće

## Vanjske veze