Sobes.tech
Middle

Koks yra sesijos veikimo mechanizmas interneto programose?

sobes.tech AI

Atsakymas iš AI

Sesijos veikimo mechanizmas grindžiamas naudotojo būsenos išsaugojimu tarp HTTP užklausų, kurios savo esme yra be valstybės. Tai pasiekiama naudojant unikalų sesijos identifikatorių:

Pagrindiniai žingsniai:

  1. Naudotojo pirmoji užklausa: Naudotojas siunčia užklausą į žiniatinklio serverį.
  2. Sesijos sukūrimas: Jei užklausa yra iš nepažįstamo naudotojo (neturi sesijos identifikatoriaus), serveris sukuria naują sesiją savo pusėje (atmintyje, duomenų bazėje, failų sistemoje) ir sugeneruoja unikalų sesijos identifikatorių.
  3. Identifikatoriaus siuntimas klientui: Serveris siunčia šį identifikatorių kaip slapuką (Set-Cookie: SESSIONID=xyz; path=/).
  4. Išsaugojimas kliento pusėje: Naršyklė išsaugo šį slapuką ir siunčia jį su visomis vėlesnėmis užklausomis į tą patį domeną (Cookie: SESSIONID=xyz).
  5. Identifikavimas serveryje: Kiekvienos vėlesnės užklausos metu, jei slapuke yra sesijos identifikatorius, serveris naudoja jį, kad surastų atitinkamą sesiją ir gautų išsaugotus naudotojo duomenis.
  6. Sesijos pabaiga: Sesija gali būti baigta dėl neveikimo laikotarpio pabaigos, naudotojo išėjimo (logout) arba naršyklės uždarymo (jei slapuko galiojimo laikas nėra nustatytas).

Pavyzdys — naudoti sesiją saugoti autorizacijos informaciją:

// Java Servlets pavyzdys
HttpSession session = request.getSession(); // Gauti arba sukurti sesiją

// Patikrinti, ar naudotojas yra prisijungęs
if (session.getAttribute("loggedInUser") == null) {
    // Naudotojas neprisijungęs, nukreipti į prisijungimo puslapį
    response.sendRedirect("/login");
} else {
    // Naudotojas prisijungęs, gauti duomenis
    User user = (User) session.getAttribute("loggedInUser");
    // ... darbai su naudotojo duomenimis
}

Sesijų saugyklos:

  • Atmintyje serveryje (tinka mažoms programoms)
  • Serveryje esančiuose failuose
  • Duomenų bazėje (klasikinis variantas, skalabilus)
  • Išsklaidytose talpyklose (Redis, Memcached) — skaliarizacijai keliuose serveriuose

Saugumas:

  • Naudojant "secure" ir "HttpOnly" žymes slapukams
  • ID atnaujinimas po sėkmingos autentifikacijos
  • Tinkamas sesijos laiko nustatymas
  • Apsauga nuo Session Hijacking (sesijos identifikatoriaus perėmimo).