Bosh sahifa Wiki Session

Session

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:

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.

Session ko‘pincha cookie orqali ishlaydi. Cookie browserda saqlanadi va serverga har bir so‘rov bilan yuboriladi.

Session cookie ichida odatda:

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:

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 sessionserver 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 sessionserver 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:

  • Memoryserver xotirasida;
  • Filefayl tizimida;
  • Database — jadval ichida;
  • Redis — tezkor cache/storage sifatida;
  • Memcachedcache asosidagi session saqlash;
  • Cookieclient 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:

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:

  • session key;
  • session data;
  • user ID;
  • expiration date;
  • created date;
  • updated date.

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 sessionbrowser 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 sessionbrowser 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 sessionlogin 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 sessionlogin qilgan foydalanuvchiga tegishli session. Bu session foydalanuvchi akkaunti bilan bog‘langan bo‘ladi.

Authenticated session’da quyidagilar bo‘lishi mumkin:

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:

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:

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:

Session hijacking authentication xavfsizligiga bevosita ta’sir qiladi.

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 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:

Session cookie’larda HttpOnly flag ko‘p ishlatiladi.

SameSitecookie 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:

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:

Bunday tizimlarda sessionlar Redis yoki umumiy database’da saqlanishi mumkin.

Sticky session

Sticky sessionload balancer foydalanuvchini doim bir xil backend serverga yo‘naltiradigan mexanizm.

Sticky session quyidagilarda ishlatiladi:

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:

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