Middle
Kako funkcioniše mehanizam sesije u veb aplikacijama?
sobes.tech АИ
Одговор од АИ
Mehanizam rada sesije zasniva se na očuvanju stanja korisnika između HTTP zahteva, koji su po svojoj suštini bezstetni. To se postiže korišćenjem jedinstvenog identifikatora sesije.
Glavni koraci:
- Prvi zahtev korisnika: Korisnik šalje zahtev web serveru.
- Kreiranje sesije: Ako zahtev dolazi od nepoznatog korisnika (bez identifikatora sesije), server kreira novu sesiju na svojoj strani (u memoriji, u bazi podataka, u sistemu fajlova) i generiše jedinstveni identifikator sesije.
- Slanje identifikatora klijentu: Server šalje taj identifikator klijentu u obliku kolačića (
Set-Cookie: SESSIONID=xyz; path=/). - Skladištenje na klijentu: Pregledač čuva taj kolačić i šalje ga sa svim narednim zahtevima na isti domen (
Cookie: SESSIONID=xyz). - Identifikacija na serveru: Pri primanju svakog narednog zahteva sa kolačićem koji sadrži identifikator sesije, server koristi taj identifikator za pronalazak odgovarajuće sesije i dobijanje sačuvanih podataka korisnika.
- Završetak sesije: Sesija može završiti zbog neaktivnosti, eksplicitnog odjavljivanja korisnika (logout) ili zatvaranja pregledača (ako kolačić sesije nema rok trajanja).
Primer korišćenja sesije za skladištenje informacija o autorizaciji:
// Primer u Java Servlets
HttpSession session = request.getSession(); // Dobijanje ili kreiranje sesije
// Provera da li je korisnik ulogovan
if (session.getAttribute("loggedInUser") == null) {
// Korisnik nije ulogovan, preusmeravanje na stranicu za prijavu
response.sendRedirect("/login");
} else {
// Korisnik je ulogovan, dobijanje podataka
User user = (User) session.getAttribute("loggedInUser");
// ... rad sa podacima korisnika
}
Skladištenje sesija:
- U memoriji servera (pogodno za male aplikacije).
- U sistemu fajlova servera.
- U bazi podataka (klasična, skalabilna opcija).
- U distribuiranim keš memorijama (Redis, Memcached) za skaliranje na više servera.
Bezbednost:
- Korišćenje zastavica "secure" i "HttpOnly" za kolačiće sesije.
- Regeneracija ID-a sesije nakon uspešne autentifikacije.
- Postavljanje odgovarajućeg vremena isteka sesije.
- Zaštita od Session Hijacking (ukrasti sesiju).