Cookie — o'qish, yozish, o'chirish
Muammodan boshlaylik
Foydalanuvchi login qildi. Brauzer yopildi. Ertasi kuni saytga qaytdi — "Xush kelibsiz, Jasur!" deydi, parolni qaytadan kiritmasdan.
Local Storage ham saqlab qo'ya olardi. Lekin Local Storage ning bir kamchiligi bor: u faqat brauzerda saqlanadi, serverga ketmaydi. Har so'rovda server "bu kim?" deb bilmaydi.
Cookie esa har bir HTTP so'rovda avtomatik serverga yuboriladi. Server uni o'qiydi, "kim ekanini" biladi. Shuning uchun autentifikatsiya uchun cookie ishlatiladi.
Cookie nima?
Cookie — brauzer va server o'rtasidagi "eslatma qog'oz". Server cookie ni bir marta beradi, keyin brauzer uni har so'rovda serverga qaytaradi.
Hayotiy o'xshatma
Mehmonxona kaliti. Qabul stolida ro'yxatdan o'tdingiz — sizga plastik karta berdi. Har safar xonangizga kirganda kartani tutasiz — eshik "siz bu yerning mehmonisiz" deb biladi va ochiladi. Cookie — o'sha plastik karta. Bir marta beriladi, har safar ko'rsatiladi.
Cookie o'qish va yozish
JavaScript da document.cookie orqali ishlash mumkin:
// Cookie yozish
document.cookie = "ism=Jasur";
document.cookie = "til=uz";
// Cookie o'qish — hammasi bir qatorda
console.log(document.cookie); // "ism=Jasur; til=uz"
document.cookie ga yozish — mavjud cookie ni o'chmaydi. Har yozish yangi cookie qo'shadi yoki shu nomdagi cookie ni yangilaydi.
Cookie parametrlari — muddati, yo'l, xavfsizlik
Cookie ni yozish vaqtida bir nechta parametr berilishi mumkin. Ular aniqlamasa — brauzer yopilganda cookie o'chib ketadi.
expires — cookie qachon o'chadi:
const kun = new Date();
kun.setDate(kun.getDate() + 30); // ← 30 kundan keyin
document.cookie = `token=abc123; expires=${kun.toUTCString()}`;
max-age — nechi soniyadan keyin o'chadi (expires dan qulay):
document.cookie = "token=abc123; max-age=2592000"; // ← 30 kun (soniyada)
path — cookie qaysi sahifalarda ko'rinadi:
document.cookie = "ism=Jasur; path=/"; // ← butun saytda
document.cookie = "ism=Jasur; path=/admin"; // ← faqat /admin da
secure — faqat HTTPS da yuboriladi:
document.cookie = "token=abc123; secure";
httpOnly — JavaScript ko'ra olmaydi (faqat server orqali):
httpOnly ni JavaScript orqali qo'yib bo'lmaydi — bu faqat server o'rnatadi. Bu juda muhim xavfsizlik xususiyati: XSS hujumida JavaScript cookie ni o'qiy olmaydi.
Cookie o'qish — parsing
document.cookie — barcha cookie larni bitta matn sifatida beradi. Alohida cookie ni topish uchun ajratish kerak:
function cookieOl(nom) {
const cookies = document.cookie.split("; ");
for (const cookie of cookies) {
const [kalit, qiymat] = cookie.split("=");
if (kalit === nom) return qiymat;
}
return null;
}
console.log(cookieOl("ism")); // "Jasur"
console.log(cookieOl("til")); // "uz"
Cookie o'chirish — muddatini o'tkazib yuborish
Cookie ni o'chirish uchun — uning muddatini o'tgan vaqtga qo'ying:
function cookieOchir(nom) {
document.cookie = `${nom}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;
}
cookieOchir("token"); // ← token cookie o'chirildi
1970 yil — Unix epoch boshi. Bu vaqt allaqachon o'tgan, demak cookie darhol o'chadi.
Cookie, Local Storage, Session Storage — qaysi biri?
Uchala brauzer ombori bor. Qaysi birini qachon ishlatish kerak?
| Cookie | Local Storage | Session Storage | |
|---|---|---|---|
| Muddati | belgilanadi | doimiy | tab yopilsa |
| Hajm | ~4 KB | ~5–10 MB | ~5–10 MB |
| Serverga ketadi | Ha, avtomatik | Yo'q | Yo'q |
| JS dan o'qish | Ha (httpOnly bo'lmasa) | Ha | Ha |
| Qachon ishlatiladi | autentifikatsiya, server kerak | sozlamalar, savat | vaqtinchalik holat |
Hayotiy o'xshatma taqqoslash uchun
Cookie — pasport. Har yerda olib yurasiz, so'ralsa ko'rsatasiz.
Local Storage — uy daftarchasi. Faqat uyda, hech yerga olib bormaysiz.
Session Storage — samolyotdagi bilyet. Parvozda kerak, tushgach yo'q.
Tez-tez uchraydigan xatolar
Token ni JavaScript orqali o'qiladigan cookie da saqlash:
httpOnly flagsiz cookie — XSS hujumida o'g'irlanishi mumkin. Autentifikatsiya tokeni faqat server tarafidan httpOnly qilingan cookie da saqlanishi kerak.
// ❌ — JavaScript cookie o'qiy oladi → XSS xavfi
document.cookie = "token=abc123";
// ✅ — server Set-Cookie headerida httpOnly bilan o'rnatadi
// Set-Cookie: token=abc123; HttpOnly; Secure; SameSite=Strict
Path ni belgilasmaslik:
// ❌ — faqat hozirgi sahifada ko'rinadi
document.cookie = "ism=Jasur";
// ✅ — butun saytda
document.cookie = "ism=Jasur; path=/";
O'chirish vaqtida path ni eslab qolmaslik:
// ❌ — path mos kelmasa, o'chirmaydi
document.cookie = "ism=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
// ✅ — qo'shgan path bilan o'chirish
document.cookie = "ism=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/";
Xulosa
Cookie — brauzer va server o'rtasidagi "eslatma". Har HTTP so'rovda avtomatik serverga ketadi.
document.cookie — yozish va o'qish. O'chirish — muddatni o'tkazish.
Autentifikatsiya tokeni uchun — server httpOnly cookie o'rnatishi kerak. JavaScript orqali o'rnatilgan cookie XSS ga zaif.
Hajm — atigi 4KB. Katta ma'lumot uchun Local Storage.
Keyingi dars
51-dars: WebSocket — real-time ulanish