Brauzerda ma'lumot saqlash: localStorage, sessionStorage va cookie'lar farqi, saqlash hajmi va muddatlari, faqat string saqlash cheklovi hamda XSS xavfsizligi.
Bu bobda brauzerda ma'lumotni saqlashning uchta asosiy usulini o'rganamiz. Chapter 19'da JSON bilan localStorage'ni qisqacha ko'rgan edik — endi buni to'liq va boshqa usullar bilan solishtirgan holda o'rganamiz.
localStorage — brauzerda ma'lumotni doimiy (brauzer yopilsa ham, kompyuter o'chirilsa ham) saqlaydigan xotira.
| Metod | Vazifasi |
|---|---|
localStorage.setItem(key, value) | Ma'lumot saqlash |
localStorage.getItem(key) | Ma'lumot olish |
localStorage.removeItem(key) | Ma'lumotni o'chirish |
localStorage.clear() | Barcha ma'lumotni tozalash |
script.jsJavaScriptlocalStorage.setItem("username", "Ali");console.log(localStorage.getItem("username")); // "Ali"localStorage.removeItem("username");console.log(localStorage.getItem("username")); // null
⚠️ Common Mistake
localStorage faqat string saqlay oladi. Object yoki array saqlash uchun, Chapter 19'da o'rgangan JSON.stringify()/JSON.parse() kerak:
script.jsJavaScriptlet user = { name: "Ali", age: 25 };localStorage.setItem("user", JSON.stringify(user));let savedUser = JSON.parse(localStorage.getItem("user"));console.log(savedUser.name); // "Ali"
sessionStorage — localStoragega juda o'xshaydi (bir xil metodlar), lekin ma'lumot faqat brauzer tab yopilguncha saqlanadi.
| Xususiyat | localStorage | sessionStorage |
|---|---|---|
| Saqlash muddati | Doimiy (o'chirilmaguncha) | Faqat tab ochiq bo'lguncha |
| Bir nechta tab orasida | Bo'lishiladi (bir xil) | Har bir tab — alohida |
| API | Bir xil | Bir xil |
script.jsJavaScriptsessionStorage.setItem("tempData", "faqat shu tab uchun");console.log(sessionStorage.getItem("tempData"));
💡 Key Idea
sessionStorage — vaqtinchalik ma'lumot uchun ideal, masalan: forma to'ldirish jarayonida vaqtinchalik saqlash, yoki bitta sessiya davomida foydalanuvchi tanlovlarini eslab qolish.
Cookie — brauzerda ma'lumot saqlashning eng eski usuli, u localStorage/sessionStoragedan farqli, serverga har bir so'rov bilan avtomatik yuboriladi.
script.jsJavaScriptdocument.cookie = "username=Ali; max-age=3600"; // 1 soatgaconsole.log(document.cookie); // "username=Ali"
| Xususiyat | localStorage | sessionStorage | Cookies |
|---|---|---|---|
| Hajm chegarasi | ~5-10 MB | ~5-10 MB | ~4 KB |
| Serverga avtomatik yuboriladimi | ❌ Yo'q | ❌ Yo'q | ✅ Ha |
| Muddat | Doimiy | Tab yopilguncha | Belgilanadigan (max-age) |
| Ishlatilishi | Foydalanuvchi sozlamalari, offline ma'lumot | Vaqtinchalik holat | Autentifikatsiya, server bilan bog'liq ma'lumot |
🔥 Important
Cookie'lar har bir HTTP so'rovi bilan serverga avtomatik yuboriladi, shuning uchun ular katta hajmdagi ma'lumot uchun mos emas (bu tarmoq trafigini oshiradi). Zamonaviy veb-ilovalarda, autentifikatsiya token'lari kabi kichik, server bilan bog'liq ma'lumotlar uchun cookie, boshqa hamma narsa uchun esa localStorage ishlatiladi.
localStorage — qulay, lekin ba'zi muhim cheklovlarga ega, ular ko'p yangi boshlovchilarni "ushlab qoladi".
Yuqorida ko'rganimizdek, faqat string saqlanadi. Agar buni unutib, to'g'ridan-to'g'ri object saqlansa:
script.jsJavaScriptlet user = { name: "Ali" };localStorage.setItem("user", user); // ❌ Xato usulconsole.log(localStorage.getItem("user")); // "[object Object]" — string'ga noto'g'ri aylantirilgan!
Nima uchun bunday bo'ladi? setItem() — har qanday qiymatni avtomatik ravishda .toString() orqali stringga aylantiradi, lekin object'ning standart .toString() metodi foydali ma'lumot bermaydi, faqat "[object Object]" qaytaradi.
To'g'ri yechim — har doim JSON.stringify() ishlatish (Chapter 36.1'da ko'rsatilgan).
localStorage — JavaScript orqali to'liq kirish mumkin bo'lgan oddiy xotira. Agar sahifada XSS zaifligi (Chapter 17.5) bo'lsa, xakerlar localStoragedagi ma'lumotni (masalan, parol yoki token) o'g'irlashi mumkin.
⚠️ Common Mistake
Juda maxfiy ma'lumotlarni (parollar, kredit karta ma'lumotlari) localStorageda saqlash — xavfsizlik nuqtai nazaridan tavsiya etilmaydi. Bunday ma'lumotlar uchun httpOnly cookie (JavaScript orqali kirish mumkin bo'lmagan, faqat server tomonidan boshqariladigan) afzalroq.
localStorage hajmi cheklangan (odatda ~5-10 MB). Agar chegaradan oshirilsa, xatolik yuz beradi:
script.jsJavaScripttry {localStorage.setItem("bigData", veryLargeString);} catch (error) {console.log("Xotira to'ldi: " + error.message);}
🔗 Connection
Bu — Chapter 18'da o'rgangan try/catchning yana bir amaliy qo'llanilishi: tashqi resurs (bu holatda brauzer xotirasi) bilan ishlashda xatolikni kutish va boshqarish har doim yaxshi amaliyot hisoblanadi.
Task:
localStoragega "theme" kaliti bilan "dark" qiymatini saqlang, keyin uni o'qib konsolga chiqaring.
Required Concepts:
localStorage.setItem, getItemlocalStorage.setItem("theme", "dark");Task:
Object ({ name: "Vali", score: 95 }) yarating, uni JSON.stringify() bilan localStoragega saqlang, keyin JSON.parse() bilan qayta o'qib, scoreni konsolga chiqaring.
Required Concepts:
localStorage + JSON (Chapter 19)Task:
Oddiy "Eslatmalar" (Notes) funksiyasini yozing: addNote(text) — yangi eslatmani localStoragedagi array'ga qo'shadi (avval mavjud eslatmalarni JSON.parse bilan o'qib, yangisini qo'shib, qayta JSON.stringify bilan saqlaydi). getNotes() — barcha eslatmalarni array sifatida qaytaradi.
Required Concepts:
localStorage + JSONlocalStorageda hali eslatmalar bo'lmasa, getItem() — null qaytaradi, shuni tekshirib, bo'sh array bilan boshlang.script.jsJavaScriptlet data = { count: 5 };localStorage.setItem("data", data);console.log(localStorage.getItem("data"));
🧠 Think first! Javobni ko'rishdan oldin kamida 30 soniya o'ylang.
<details> <summary>Answer</summary> "[object Object]"Why?
localStorage.setItem() — faqat string saqlaydi. Agar object to'g'ridan-to'g'ri berilsa, JavaScript uni avtomatik ravishda .toString() orqali stringga aylantiradi, bu esa object'lar uchun foydasiz "[object Object]" natijasini beradi. JSON.stringify() ishlatilishi kerak edi.
Quyidagi kodda muammo bor:
script.jsJavaScriptfunction saveSettings(settings) {localStorage.setItem("settings", settings);}function loadSettings() {let data = localStorage.getItem("settings");return JSON.parse(data);}saveSettings({ theme: "dark", fontSize: 16 });let settings = loadSettings();console.log(settings.theme); // Xatolik!
Your Task:
Yechim:
</details>script.jsJavaScriptfunction saveSettings(settings) {localStorage.setItem("settings", JSON.stringify(settings));}function loadSettings() {let data = localStorage.getItem("settings");return JSON.parse(data);}saveSettings({ theme: "dark", fontSize: 16 });let settings = loadSettings();console.log(settings.theme); // "dark"
localStorage — doimiy, sessionStorage — faqat tab ochiq bo'lguncha saqlaydi.localStorage/sessionStorage — faqat string saqlaydi, object/array uchun JSON kerak.localStorage xavfsizlik nuqtai nazaridan tavsiya etilmaydi.localStorage, vaqtinchalik uchun sessionStorage ishlating.JSON.stringify()/JSON.parse() ishlating.localStorageda saqlamang.localStorage operatsiyalarini try/catch bilan himoyalash — xotira to'lib qolgan holatlar uchun foydali.script.jsJavaScript// localStoragelocalStorage.setItem("key", JSON.stringify(value));JSON.parse(localStorage.getItem("key"));localStorage.removeItem("key");localStorage.clear();// sessionStorage — bir xil APIsessionStorage.setItem("key", "value");// Cookiedocument.cookie = "key=value; max-age=3600";
Mavzu bo‘yicha tushunchalaringizni interaktiv test orqali sinovdan o‘tkazing va natijalarni bilib oling.
Darslikda o‘rganilgan qoidalarga asosan real kod yozing, testlardan o‘tkazing va yechimlarni mustahkamlang.
Test Sinovi
Hali topshirilmagan (kamida 75% kerak)
Amaliy Masalalar
0 / 3 ta yechildi (kamida 75% kerak)
Dars sifati va mazmunini yaxshilash uchun o‘z haqqoniy bahoingizni qoldiring.
Mavzuni to‘liq o‘zlashtirish uchun test sinovi, amaliy kodlash va bog‘liq darslar
O‘z bilimingizni interaktiv test savollari orqali tekshiring va darhol xatolarni tahlil qiling.
Nazariyani real kod yozish bilan mustahkamlang, avtomatik testlardan o‘ting va XP to‘plang.
Kurs bo‘yicha keyingi va bog‘liq mavzular: