09.12. Kolačići (kreiranje, čitanje i brisanje)
Šta je HTML kolačić?
Kolačić (eng. cookie) je mali fajl sa informacijama koji web sajt čuva na računaru korisnika putem pretraživača. Njegova svrha je da sajt "zapamti" korisnika i prilagodi sadržaj prema njegovim potrebama. Na primer, kolačići se koriste za:
- Pamćenje korisničke prijave (da ne morate svaki put unositi korisničko ime i šifru).
- Čuvanje podešavanja, poput izabranog jezika sajta.
- Praćenje stavki u korpi za kupovinu na online prodavnici.
U suštini, kolačići omogućavaju sajtu da "pamti" informacije između korisnikovih poseta.
Primer kako radi kolačić:
- Kada posetite sajt i prijavite se, sajt šalje kolačić vašem pretraživaču.
- Pretraživač čuva taj kolačić na vašem računaru.
- Sledeći put kada posetite isti sajt, pretraživač šalje kolačić nazad sajtu kako bi vas prepoznao.
Uprošćeno:
HTML kolačić je mali fajl koji sajt može da sačuva na računaru korisnika kako bi zapamtio informacije, poput prijave, preferencija jezika ili stavki u korpi za kupovinu.
Zamislite kolačić kao ceduljicu koju sajt ostavi u vašem pretraživaču, da se seti šta ste radili kad se sledeći put vratite.
Ima ih raznih - kolačići se mogu podeliti prema nekoliko kriterijuma od kojih su najvažniji:
Prema trajanju
-
Privremeni kolačići (Session Cookies):
- Traju samo dok je otvoren pretraživač.
- Kada korisnik zatvori pretraživač, ovi kolačići se automatski brišu.
- Koriste se, na primer, za sve što ne treba čuvati duže od trenutnog korišćenja sajta.
- Ne mora im se postavljati
expiresilimax-age.
-
Trajni kolačići (Persistent Cookies):
- Ostaju sačuvani i nakon zatvaranja pretraživača, sve dok ne isteknu ili ih korisnik ručno ne obriše.
- Rok isteka se podešava opcijom
expires(datum) ilimax-age(sekunde). - Koriste se za čuvanje dugoročnih podataka, poput podešavanja jezika ili preferencija korisnika.
Ako se ne postavi
expiresilimax-age:- Kolačić će biti privremen i biće obrisan zatvaranjem pretraživača.
Prema svrsi
-
Neophodni kolačići (Essential Cookies):
- Omogućavaju osnovne funkcionalnosti sajta, kao što su navigacija i pristup zaštićenim delovima.
- Bez ovih kolačića, sajt ne može pravilno funkcionisati.
-
Funkcionalni kolačići (Functional Cookies):
- Pamte korisničke izbore, npr. jezik sajta, temu ili zapamćene stavke u korpi za kupovinu.
-
Kolačići za performanse (Performance Cookies):
- Služe za prikupljanje anonimnih podataka o tome kako korisnici koriste sajt.
- Na primer, beleže koje stranice se najviše posećuju kako bi se sajt optimizovao.
-
Marketinški kolačići (Marketing Cookies):
- Prate ponašanje korisnika na internetu radi prikazivanja personalizovanih reklama.
- Najčešće ih koriste oglašivačke mreže.
-
Analitički kolačići (Analytics Cookies):
- Prikupljaju informacije o ponašanju korisnika na sajtu radi unapređenja iskustva.
- Primer: Google Analytics kolačići.
Prema domenu
-
Prvi kolačići (First-party Cookies):
- Postavlja ih sajt koji korisnik posećuje.
- Koriste se za osnovne funkcije sajta, kao što su prijava i podešavanja korisnika.
-
Kolačići treće strane (Third-party Cookies):
- Postavljaju ih drugi sajtovi ili servisi (npr. oglašivači ili alati za analitiku).
- Koriste se za praćenje korisnika između različitih sajtova radi ciljanog oglašavanja.
Kolačići su mali tekstualni fajlovi koji:
- Čuvaju podatke u parovima ključ-vrednost (npr.
korisnik=Marko). - Mogu se podesiti sa opcijama kao što su datum isteka (expires), domen (domain) i putanja (path).
Praktično:
1. Kreiranje kolačića
Kolačić se kreira u JavaScript-u tako što se dodeljuje vrednost promenljivoj document.cookie.
document.cookie = "korisnik=Marko; expires=Fri, 31 Dec 2024 12:00:00 UTC; path=/";
- korisnik=Marko – ime kolačića je
korisnik, a vrednostMarko. - expires – vreme do kada kolačić važi (ovde do 31. decembra 2024.) – opciono ...
- path – lokacija na kojoj kolačić važi (ako je
/, važi za ceo sajt) – opciono ...
Ako se ne postavi datum isteka, kolačić će trajati samo dok je otvoren korisnikov pretraživač. Ako se ne postavi putanja, onda će važiti samo na toj web stranici.
2. Čitanje kolačića
Da bi se pročitale vrednosti sačuvanih kolačića, koristi se document.cookie, koji vraća sve kolačiće kao jedan string.
console.log(document.cookie);
// izlaz: "korisnik=Marko"
Ako ima više kolačića, oni su odvojeni tačka-zarezom.
korisnik=Marko; language=sr;
3. Brisanje kolačića
Kolačić se briše tako što mu se postavi datum isteka u prošlost.
document.cookie = "korisnik=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/";
max-age, pa će jako brzo i da nestane)Kompletan primer
U sledećem primeru kreiramo, čitamo i brišemo kolačiće (najjednostavniji način).
<!DOCTYPE html>
<html lang="sr">
<head>
<meta charset="UTF-8">
<title>Kolačići Primer</title>
</head>
<body>
<h1>Rad sa kolačićima</h1>
<button onclick="kreirajKolacic()">Kreiraj kolačić</button>
<button onclick="prikaziKolacice()">Prikaži kolačiće</button>
<button onclick="obrisiKolacic()">Obriši kolačić</button>
<script>
function kreirajKolacic() {
document.cookie = "korisnik=Marko; expires=Fri, 15 Dec 2024 12:00:00 UTC; path=/";
alert("Kolačić kreiran!");
}
function prikaziKolacice() {
alert("Trenutni kolačići: " + document.cookie);
}
function obrisiKolacic() {
document.cookie = "korisnik=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/";
alert("Kolačić obrisan!");
}
</script>
</body>
</html>
Zadatak 1:
Proširiti ovaj primer tako što će se dodati polje za unos imena korisnika...
kako smo to radili na času vežbi:
Kako se dodaje labela i input polje:
<label>
Unesi ime: <input type="text" id="ime">
</label>
Funkcija kreirajKolacic()
function kreirajKolacic()
{
let ime = document.getElementById("ime").value;
document.cookie = "korisnik="+ime+";max-age=5;" ;
alert("kolacic je kreiran");
}
Zadatak 2:
Proširiti ovaj primer tako što će se, nakon horizontalne crte, postaviti:
- polja za unos: imena kolačića, vrednosti kolačića i broja sekundi koliko će kolačić da traje,
- dugme za unos kolačića,
- dugme za prikaz svih kolačića,
- dugme za brisanje kolačića sa navedenim imenom.
Smernice za rad: koristiti max-age za trajanje kolačića u sekundama, a za pronalaženje kolačića sa nevedenim imenom pogledjte dodatak na kraju lekcije.

kako smo to radili na času vežbi:
<label>
Naziv kolačića: <input type="text" id="naziv">
</label>
<label>
Vrednost kolačića: <input type="text" id="vrednost">
</label>
<label>
Koliko traje: <input type="number" id="traje">
</label>
<button onclick="xyz()"> Dodaj </button>
function xyz()
{
let naziv = document.getElementById("naziv").value;
let vrednost = document.getElementById("vrednost").value;
let traje = document.getElementById("traje").value;
document.cookie = naziv + "=" + vrednost + ";max-age=" + traje + ";" ;
alert("kolacic je kreiran");
}
U cilju vežbe iza ovog dugmića je prikazano malo drugačije rešenje prvog zadatka (- za proučavanje kod kuće -)
Kako može da izgleda HTML deo :
<h1>Rad sa kolačićima</h1>
<form>
<label>
Unesite ime: <input type="text" id="ime">
</label>
<button type="button" onclick="postaviKolacic()">Sačuvaj ime</button>
<button type="button" onclick="prikaziKolacic()">Prikaži ime</button>
<button type="button" onclick="obrisiKolacic()">Obriši ime</button>
</form>
Kako može da izgleda JavaScript deo:
DODATAK: Kako pronaći određeni kolačić, a naročito ako ih ima više
Svaki kolačić je odvojen tačkom i zarezom, pa je neophodno da ručno izdvojite željeni kolačić.
function nadjiKolacic(ime) {
const kolacici = document.cookie; // Svi kolačići kao jedan string
const NizKolacica = kolacici.split(';'); // Razdvaja kolačiće po ;
for (let i = 0; i < NizKolacica.length; i++) {
let kolacic = NizKolacica[i].trim(); // Uklanja razmake
if (kolacic.startsWith(ime + '=')) { // Traži kolačić sa datim imenom
return kolacic.substring(ime.length + 1); // Vraća vrednost kolačića
}
}
return null; // Ako kolačić nije pronađen
}
Objašnjenje:
-
document.cookie: string koji sadrži sve kolačiće postavljene na stranici. Kolačići su u formiime=vrednosti odvojeni su sa tačkom-zarezom (;). -
split(';'): Deli string u niz kolačića na osnovu tačke-zareza, pa dobijamo niz kolačića koji se može obraditi jedan po jedan. -
trim(): Uklanja eventualne praznine sa početka i kraja svakog kolačića, jer kolačići mogu biti zapisani sa razmacima. -
startsWith(ime + '='): Proverava da li kolačić počinje sa željenim imenom. Na primer, ako tražimo kolačić sa imenom"korisnik", proverava da li kolačić počinje sa"korisnik=". -
substring(ime.length + 1): Ako je kolačić pronađen, uzima vrednost kolačića (sve što se nalazi posle znaka=). -
return null: Ako kolačić nije pronađen, funkcija vraćanull.
Kako koristiti ovu funkciju?
Ako želite da pronađete kolačić sa imenom "korisnik", možete pozvati funkciju ovako:
const imeKorisnika = nadjiKolacic("korisnik");
if (imeKorisnika) {
alert("Korisnik je: " + imeKorisnika);
} else {
alert("Kolačić 'korisnik' nije pronađen.");
}