Session — foydalanuvchi tizim bilan ishlayotgan vaqt davomida uning holatini saqlash mexanizmi. Session orqali web ilova foydalanuvchi login qilganmi, qaysi akkauntga tegishli, qanday vaqtinchalik ma’lumotlarga ega ekanini aniqlaydi.
HTTP protokoli stateless bo‘lgani uchun har bir so‘rov mustaqil keladi. Session esa shu mustaqil so‘rovlarni bitta foydalanuvchi faoliyati bilan bog‘lashga yordam beradi.
Vazifasi
Session foydalanuvchi va server o‘rtasidagi davomiy holatni saqlash uchun ishlatiladi.
Session quyidagi vazifalarda qo‘llanadi:
- foydalanuvchi login holatini saqlash;
- foydalanuvchi ID’sini vaqtincha bog‘lab turish;
- savatcha ma’lumotlarini saqlash;
- forma jarayonlarini davom ettirish;
- vaqtinchalik sozlamalarni saqlash;
- authentication jarayonini boshqarish;
- admin panelga kirish holatini saqlash;
- CSRF token bilan ishlash;
- foydalanuvchi faoliyat muddatini nazorat qilish.
Masalan, foydalanuvchi login qilgandan keyin server session yaratadi va keyingi sahifalarda foydalanuvchini shu session orqali taniydi.
Session qanday ishlaydi?
Session odatda server tomonda saqlanadi. Browserda esa shu sessionga tegishli maxsus ID cookie orqali saqlanadi.
Oddiy jarayon:
- foydalanuvchi login qiladi;
- server foydalanuvchi uchun session yaratadi;
- sessionga noyob session ID beriladi;
- session ID browser cookie’siga yoziladi;
- browser keyingi so‘rovlarda shu cookie’ni serverga yuboradi;
- server session ID orqali foydalanuvchini aniqlaydi;
- session muddati tugaganda yoki logout qilinganda session bekor qilinadi.
Session foydalanuvchi va server o‘rtasidagi holatni davomiy qilib ko‘rsatadi.
Session ID
Session ID — har bir session uchun yaratiladigan noyob identifikator. Server shu ID orqali qaysi foydalanuvchiga tegishli session ekanini topadi.
Session ID odatda:
- tasodifiy yaratiladi;
- cookie ichida saqlanadi;
- serverdagi session ma’lumotiga bog‘lanadi;
- har bir foydalanuvchi uchun alohida bo‘ladi;
- logout yoki expiration vaqtida yaroqsiz bo‘ladi.
Session ID foydalanuvchi paroli yoki maxfiy ma’lumotning o‘zi emas, balki serverdagi sessionga ishora qiluvchi kalit hisoblanadi.
Cookie bilan bog‘liqligi
Session ko‘pincha cookie orqali ishlaydi. Cookie browserda saqlanadi va serverga har bir so‘rov bilan yuboriladi.
Session cookie ichida odatda:
- session ID;
- expiration vaqti;
- domain;
- path;
- security flaglar;
- SameSite sozlamasi bo‘ladi.
Server cookie’dagi session ID’ni o‘qib, foydalanuvchi sessionini topadi.
Server-side session
Server-side session — session ma’lumotlari server tomonda saqlanadigan usul. Browserda faqat session ID bo‘ladi.
Server-side session saqlanadigan joylar:
- server xotirasi;
- file storage;
- database;
- Redis;
- Memcached;
- cache service.
Masalan, Django klassik session tizimida session ma’lumotlarini database, cache yoki file orqali saqlashi mumkin.
Client-side session
Client-side session — session ma’lumotlari client tomonda saqlanadigan yondashuv. Bunda ma’lumot cookie yoki token ichida bo‘lishi mumkin.
Client-side session’da quyidagilar uchraydi:
Bu yondashuvda server session holatini alohida saqlamasligi mumkin, lekin ma’lumotning yaxlitligi imzo yoki shifrlash orqali tekshiriladi.
Stateful session
Stateful session — server foydalanuvchi session holatini saqlaydigan session turi.
Stateful session xususiyatlari:
- session ma’lumoti serverda turadi;
- browserda session ID saqlanadi;
- logout serverdagi sessionni o‘chiradi;
- session database yoki cache’da saqlanishi mumkin;
- klassik web ilovalarda ko‘p uchraydi.
Stateful session server xotirasi yoki saqlash tizimi bilan bog‘liq bo‘ladi.
Stateless session
Stateless session — server foydalanuvchi holatini alohida saqlamaydigan yondashuv. Bunda har bir so‘rovda kerakli authentication ma’lumoti token orqali yuboriladi.
Stateless session’da quyidagilar ishlatilishi mumkin:
Stateless yondashuv API, microservice va SPA ilovalarda ko‘p uchraydi.
Session storage
Session ma’lumotlari turli joylarda saqlanishi mumkin.
Ko‘p ishlatiladigan session storage turlari:
- Memory — server xotirasida;
- File — fayl tizimida;
- Database — jadval ichida;
- Redis — tezkor cache/storage sifatida;
- Memcached — cache asosidagi session saqlash;
- Cookie — client tomonda imzolangan ma’lumot sifatida.
Katta tizimlarda Redis session saqlash uchun ko‘p ishlatiladi.
Redis session
Redis session ma’lumotlarini tezkor xotirada saqlash uchun ishlatiladi. Redis sessionlar uchun qulay, chunki u tez ishlaydi va expiration muddatini boshqaradi.
Redis session’da quyidagilar saqlanishi mumkin:
- session ID;
- user ID;
- login holati;
- expiration vaqti;
- vaqtinchalik foydalanuvchi ma’lumotlari;
- authentication metadata.
Redis ko‘p serverli ilovalarda sessionlarni markaziy saqlash uchun ishlatiladi.
Database session
Database session — session ma’lumotlarini database jadvalida saqlash usuli. Bu usul sessionlarni doimiyroq saqlash va audit qilish uchun ishlatilishi mumkin.
Database session jadvalida quyidagilar bo‘lishi mumkin:
Database session klassik backend frameworklarda ko‘p uchraydi.
Session expiration
Session expiration — sessionning amal qilish muddati tugashi. Session muddati tugaganda foydalanuvchi qayta login qilishi yoki yangi session olishi mumkin.
Expiration quyidagilarga bog‘liq bo‘lishi mumkin:
- belgilangan vaqt;
- foydalanuvchi faoliyatsizligi;
- logout;
- parol almashinuvi;
- security policy;
- serverdagi session tozalash jarayoni.
Masalan, admin panel sessioni 30 daqiqa faoliyatsizlikdan keyin tugashi mumkin.
Idle timeout
Idle timeout — foydalanuvchi ma’lum vaqt hech qanday harakat qilmasa, sessionning tugashi.
Idle timeout quyidagi joylarda ishlatiladi:
- admin panel;
- banking tizimlari;
- korporativ portal;
- CRM;
- payment tizimlari;
- maxfiy ma’lumotli web ilovalar.
Idle timeout foydalanuvchi faol emasligini aniqlashga asoslanadi.
Absolute timeout
Absolute timeout — session qancha faol bo‘lishidan qat’i nazar, belgilangan umumiy vaqtdan keyin tugashi.
Masalan:
- session maksimal 24 soat amal qiladi;
- foydalanuvchi faol bo‘lsa ham muddat tugaganda session yangilanadi yoki bekor bo‘ladi.
Absolute timeout uzoq muddatli sessionlarni cheklash uchun ishlatiladi.
Persistent session
Persistent session — browser yopilgandan keyin ham saqlanib qoladigan session turi. Bu ko‘pincha “Remember me” funksiyasi bilan bog‘liq.
Persistent session quyidagilar orqali ishlashi mumkin:
Bunday session foydalanuvchi qayta browser ochganda ham tizimga kirgan holatda qolishiga yordam beradi.
Temporary session
Temporary session — browser yopilganda yoki qisqa muddatdan keyin tugaydigan session turi.
Temporary session quyidagi holatlarda uchraydi:
- oddiy login sessiyasi;
- mehmon foydalanuvchi savatchasi;
- qisqa muddatli forma jarayoni;
- vaqtinchalik verification oqimi;
- xavfsizlik talab qilinadigan tizimlar.
Temporary session foydalanuvchi faoliyati tugaganda tezroq yakunlanadi.
Anonymous session
Anonymous session — login qilmagan foydalanuvchi uchun yaratiladigan session. Bunday session foydalanuvchi tizimga kirmagan bo‘lsa ham vaqtinchalik holatni saqlashi mumkin.
Anonymous session’da quyidagilar saqlanishi mumkin:
- savatcha;
- til tanlovi;
- tema sozlamasi;
- vaqtinchalik forma ma’lumotlari;
- tracking identifikator;
- CSRF token.
Masalan, internet do‘konda foydalanuvchi login qilmagan holda savatchaga mahsulot qo‘shishi mumkin.
Authenticated session
Authenticated session — login qilgan foydalanuvchiga tegishli session. Bu session foydalanuvchi akkaunti bilan bog‘langan bo‘ladi.
Authenticated session’da quyidagilar bo‘lishi mumkin:
- user ID;
- role;
- permission ma’lumotlari;
- login vaqti;
- device ma’lumoti;
- IP manzil;
- session muddati.
Authenticated session himoyalangan sahifalarga kirishda ishlatiladi.
Session va authentication
Session authentication jarayonida foydalanuvchi login holatini saqlash uchun ishlatiladi.
Authentication bilan bog‘liq session jarayoni:
- foydalanuvchi credential yuboradi;
- backend credentialni tekshiradi;
- session yaratadi;
- session ID cookie orqali browserga yuboriladi;
- keyingi so‘rovlarda session ID serverga qaytadi;
- backend foydalanuvchini session orqali aniqlaydi.
Session-based authentication klassik web ilovalarda keng tarqalgan.
Session va authorization
Session foydalanuvchini aniqlab beradi, authorization esa shu foydalanuvchi nimalarga ruxsatga ega ekanini tekshiradi.
Session ichida authorizationga yordam beradigan ma’lumotlar bo‘lishi mumkin:
- user ID;
- role;
- permission cache;
- organization ID;
- tenant ID;
- login status.
Masalan, session orqali foydalanuvchi admin ekanligi aniqlansa, admin panelga kirish ruxsati tekshiriladi.
Session fixation
Session fixation — hujumchi foydalanuvchiga oldindan ma’lum session ID ishlatishga majbur qilib, keyin shu sessiondan foydalanishga urinadigan xavfsizlik muammosi.
Session fixation quyidagi holatlarda yuzaga kelishi mumkin:
- login paytida session ID yangilanmasa;
- session ID URL orqali uzatilsa;
- session ID tashqi manbadan qabul qilinsa;
- eski session login holatiga ko‘tarilsa.
Bu muammo session ID boshqaruvi bilan bog‘liq.
Session hijacking
Session hijacking — foydalanuvchining session ID yoki tokenini qo‘lga kiritib, uning nomidan tizimga kirishga urinish.
Session hijacking quyidagi yo‘llar bilan yuzaga kelishi mumkin:
- XSS orqali cookie o‘g‘irlash;
- xavfsiz bo‘lmagan HTTP ulanish;
- zararli browser extension;
- public Wi-Fi orqali trafikni kuzatish;
- loglarda session ID chiqib qolishi.
Session hijacking authentication xavfsizligiga bevosita ta’sir qiladi.
Secure cookie flag
Secure flag cookie faqat HTTPS ulanish orqali yuborilishini bildiradi. Session cookie’larda bu flag keng ishlatiladi.
Secure flag quyidagiga yordam beradi:
- cookie HTTP orqali yuborilmasligi;
- session ID ochiq trafikda ketmasligi;
- HTTPS ulanish bilan ishlash;
- session xavfsizligini oshirish.
Secure flag HTTPS ishlatiladigan saytlar uchun muhim cookie sozlamalaridan biridir.
HttpOnly cookie flag
HttpOnly flag cookie’ni JavaScript orqali o‘qib bo‘lmasligini bildiradi. Bu session cookie’larni XSS hujumlaridan himoyalashda muhim rol o‘ynaydi.
HttpOnly flag bo‘lsa:
- JavaScript cookie qiymatini o‘qiy olmaydi;
- browser cookie’ni serverga yuboradi;
- session ID client scriptlardan yashiriladi;
- XSS orqali session o‘g‘irlash xavfi kamayadi.
Session cookie’larda HttpOnly flag ko‘p ishlatiladi.
SameSite cookie
SameSite — cookie qaysi cross-site so‘rovlarda yuborilishini boshqaradigan sozlama.
SameSite qiymatlari:
Strict;Lax;None.
SameSite CSRF hujumlari xavfini kamaytirishda ishlatiladi. SameSite=None odatda Secure flag bilan birga ishlatiladi.
Session va CSRF
Session cookie orqali ishlaganda browser cookie’ni avtomatik yuboradi. Shu sababli CSRF hujumlari session-based authentication tizimlarida muhim xavfsizlik mavzusi hisoblanadi.
CSRF’dan himoya qilishda quyidagilar uchraydi:
- CSRF token;
- SameSite cookie;
- Origin header tekshiruvi;
- Referer tekshiruvi;
- muhim amallar uchun qo‘shimcha tasdiqlash.
Session cookie’lar browser tomonidan avtomatik yuborilgani uchun CSRF mexanizmlari ishlatiladi.
Session va XSS
XSS session xavfsizligiga ta’sir qilishi mumkin. Agar zararli JavaScript sahifada ishlasa, u foydalanuvchi nomidan so‘rov yuborishi yoki himoyasiz cookie’larni o‘qishi mumkin.
XSS sessionga quyidagicha ta’sir qiladi:
- session cookie o‘g‘irlanishi;
- foydalanuvchi nomidan amal bajarilishi;
- token o‘qilishi;
- sahifa ichida zararli so‘rov yuborilishi;
- authentication holatidan foydalanilishi.
HttpOnly cookie XSS orqali cookie o‘qilishini cheklaydi, lekin sahifa ichida so‘rov yuborish xavfi alohida mavzu hisoblanadi.
Session invalidation
Session invalidation — sessionni yaroqsiz qilish jarayoni.
Session quyidagi holatlarda invalid qilinishi mumkin:
- logout qilinganda;
- session muddati tugaganda;
- parol almashtirilganda;
- account bloklanganda;
- admin foydalanuvchi sessiyasini tugatganda;
- xavfsizlik hodisasi aniqlanganda.
Session invalid bo‘lgach, eski session ID orqali tizimga kirish mumkin bo‘lmaydi.
Logout
Logout session jarayonining yakuniy bosqichlaridan biridir. Logout qilinganda session serverdan o‘chiriladi yoki yaroqsiz qilinadi.
Logout jarayonida:
- session ID bekor qilinadi;
- serverdagi session ma’lumoti o‘chiriladi;
- cookie o‘chirilishi mumkin;
- foydalanuvchi guest holatiga qaytadi;
- keyingi himoyalangan so‘rovlar rad etiladi.
Logout session-based authentication tizimlarida muhim amal hisoblanadi.
Session regeneration
Session regeneration — eski session ID o‘rniga yangi session ID yaratish jarayoni.
Session regeneration quyidagi holatlarda ishlatiladi:
- login qilinganda;
- privilege o‘zgarganda;
- security risk aniqlanganda;
- session fixation xavfini kamaytirishda;
- muhim authentication bosqichlarida.
Bu jarayon session ID’ni yangilab, eski identifikatorning yaroqsiz bo‘lishini ta’minlaydi.
Session replication
Session replication — bir nechta server ishlayotgan tizimda session ma’lumotlarini serverlar orasida ulashish jarayoni.
Session replication quyidagi holatlarda kerak bo‘lishi mumkin:
- load balancing;
- bir nechta backend instance;
- distributed tizimlar;
- high availability;
- failover.
Bunday tizimlarda sessionlar Redis yoki umumiy database’da saqlanishi mumkin.
Sticky session
Sticky session — load balancer foydalanuvchini doim bir xil backend serverga yo‘naltiradigan mexanizm.
Sticky session quyidagilarda ishlatiladi:
- session faqat bitta server xotirasida saqlansa;
- backend instance’lar sessionni o‘zaro ulashmasa;
- load balancer clientni serverga bog‘lab tursa.
Sticky session load balancing va stateful sessionlar bilan bog‘liq.
Session va frontend
Frontend session holatini foydalanuvchiga ko‘rinadigan interfeysda aks ettiradi.
Frontend’da session quyidagi joylarda ishlatiladi:
- login holatini ko‘rsatish;
- profil sahifasini ochish;
- logout tugmasini chiqarish;
- protected route;
- foydalanuvchi menyusi;
- session muddati tugaganda login sahifasiga qaytarish;
- API so‘rovlariga cookie yoki token yuborish.
Browser cookie’lari session-based authenticationda frontend tomonidan avtomatik yuborilishi mumkin.
Session va backend
Backend sessionni yaratadi, tekshiradi, yangilaydi va bekor qiladi.
Backend session bilan quyidagilarni bajaradi:
- session yaratish;
- session ID generatsiya qilish;
- session storage bilan ishlash;
- session expiration tekshirish;
- foydalanuvchini session orqali aniqlash;
- logout paytida sessionni o‘chirish;
- session xavfsizlik flaglarini sozlash.
Backend session-based authenticationning asosiy mantiqiy qismidir.
Session va API
API tizimlarida session cookie yoki token orqali ishlashi mumkin. Klassik server-rendered web ilovalarda session cookie ko‘p ishlatiladi, SPA va mobile ilovalarda token-based yondashuv ham keng tarqalgan.
API session bilan ishlaganda:
- cookie orqali session ID keladi;
- backend sessionni topadi;
- user identity aniqlanadi;
- endpoint authorization tekshiradi;
- response qaytariladi.
API’da session ishlatilsa, CORS, CSRF va cookie sozlamalari muhim bo‘ladi.
Dasturlashdagi o‘rni
Session web ilovalarda foydalanuvchi holatini saqlash uchun ishlatiladigan asosiy mexanizmlardan biridir. U login, savatcha, vaqtinchalik ma’lumotlar va server-side authentication jarayonlarida keng qo‘llanadi.
Session quyidagi loyihalarda uchraydi:
- web saytlar;
- admin panellar;
- internet do‘konlar;
- CRM tizimlar;
- SaaS platformalar;
- banking tizimlari;
- forumlar;
- blog platformalar;
- server-rendered ilovalar;
- backend API’lar.
Session stateless HTTP so‘rovlarni foydalanuvchining davomiy faoliyati bilan bog‘laydigan muhim web mexanizmidir.
Bog‘liq tushunchalar
Authentication, Authorization, Cookie, Session ID, Redis, Token, JWT, CSRF, XSS, Backend, API, Browser