Session Token în dezvoltarea aplicațiilor — ce este, principiul de funcționare și diferențele față de JWT

Autor: IT Sectr Publicat: 2026-04-05 Timp de citire: 9 min

Session Token — este un identificator unic pe care serverul îl creează după autentificarea reușită a utilizatorului și îl folosește pentru identificarea cererilor ulterioare. Spre deosebire de tokenurile autosuficiente (JWT), session token este un șir aleator care nu conține date în sine: toate informațiile despre sesiune sunt stocate pe server în memoria RAM sau în baza de date. Conform datelor OAuth.com, 2025, session token rămâne cel mai răspândit mecanism de autentificare în aplicațiile web server și arhitecturile mobile hibride.

Principalele

  • Session Token — identificator aleator care face referire la datele sesiunii pe server
  • Stateful — serverul stochează starea sesiunii în Redis, Memcached sau baza de date
  • Revocare simplă — este suficient să ștergeți înregistrarea sesiunii pe server, iar tokenul devine invalid
  • Securitate — datele nu sunt stocate în token, ceea ce exclude scurgerea lor prin decodificare
  • Cookie — mod tradițional de transmitere a session token în aplicațiile web cu flaguri HttpOnly, Secure și SameSite

Ce este Session Token?

Session Token (identificator de sesiune) — este un șir unic pe care serverul îl generează și îl leagă de datele sesiunii după autentificarea utilizatorului. Tokenul nu conține nicio informație despre utilizator — este doar o cheie pentru datele stocate pe server. Această abordare se numește autentificare stateful: serverul stochează starea fiecărei sesiuni active și o verifică la fiecare cerere.

Datele sesiunii includ: identificatorul utilizatorului, ora autentificării, adresa IP, user-agent, lista de permisiuni (permissions), ora ultimei activități. Când clientul trimite o cerere cu session token, serverul găsește înregistrarea corespunzătoare în depozitul de sesiuni, verifică validitatea acesteia și extrage datele pentru procesarea cererii. Dacă înregistrarea sesiunii lipsește sau a expirat, serverul returnează o eroare de autentificare și solicită reautentificarea.

Conform datelor OWASP, 2025, session token rămâne standardul pentru aplicațiile care necesită revocarea imediată a accesului — de exemplu, în sistemele bancare și portalurile corporative, unde administratorul trebuie să poată încheia sesiunea utilizatorului instantaneu. În astfel de sisteme, session token asigură un control complet asupra accesului, de neatins pentru tokenurile stateless fără mecanisme suplimentare de blocare.

Cum funcționează Session Token

Procesul de funcționare începe atunci când clientul trimite datele de autentificare pe serverul de autentificare. Serverul verifică login-ul și parola, creează o înregistrare de sesiune în depozit (de obicei Redis sau bază de date) și returnează clientului un session token unic. Clientul salvează tokenul și îl transmite cu fiecare cerere ulterioară, iar serverul verifică de fiecare dată existența și validitatea sesiunii.

Sesiunea pe server și depozitul

Redis — cel mai popular depozit de sesiuni datorită stocării în memorie și suportului TTL (time-to-live). Fiecare sesiune este stocată ca o pereche cheie-valoare, unde cheia este session token, iar valoarea este un obiect JSON cu datele sesiunii. TTL elimină automat sesiunile expirate. Alternative: Memcached (doar memorie, fără salvare pe disc), PostgreSQL/MySQL (persistență, dar mai lent) și DynamoDB (pentru infrastructura AWS).

Exemplu de structură a sesiunii în Redis: session:{token}{“userId”: 42, “role”: “admin”, “createdAt”: 1812345678, “lastAccess”: 1812345678}. Serverul actualizează lastAccess la fiecare cerere, ceea ce permite implementarea unui timeout de inactivitate — încheierea automată a sesiunii după o perioadă de inactivitate.

Cookie vs Header

Session Token poate fi transmis în două moduri: prin HTTP cookie sau prin antetul HTTP Authorization. Cookie — modul tradițional pentru aplicații web: serverul setează un cookie cu flagurile HttpOnly (inaccesibil JavaScript), Secure (doar HTTPS) și SameSite (protecție împotriva CSRF). Pentru aplicațiile mobile se folosește mai des antetul Authorization: Bearer <session_token>, deoarece mecanismul cookie nu este întotdeauna convenabil în clienții nativi.

Ciclul de viață al Session Token

Ciclul de viață al session token include trei etape: creare, menținerea sesiunii active și încheiere. Fiecare etapă necesită o configurare corectă a securității pentru a preveni scurgerea sau interceptarea tokenului.

Creare, stocare și ștergere

Creare — serverul generează un șir aleator criptografic sigur cu lungimea de 128–256 biți (de exemplu, prin SecureRandom în Java sau os.urandom în Python). Tokenul trebuie să fie imprevizibil — utilizarea UUID sau timestamp fără entropie nu este permisă. Stocare pe client: în iOS — Keychain, în Android — EncryptedSharedPreferences, în web — HttpOnly cookie. Ștergerea are loc la deconectare: clientul șterge tokenul din depozit, serverul șterge înregistrarea sesiunii din Redis. După deconectare, session token devine inutil — serverul nu va găsi înregistrarea corespunzătoare.

Conform datelor SANS Institute, 2025, implementarea corectă a încheierii sesiunii (deconectare cu curățare pe server) previne până la 70% dintre atacurile care folosesc tokenuri furate. Este esențial nu doar să ștergeți tokenul pe client, ci și să anulați sesiunea pe server.

Session Token vs JWT

Session Token și JWT reprezintă două abordări diferite ale autentificării. Session Token — stateful (serverul stochează starea), JWT — stateless (datele în interiorul tokenului). Alegerea între ele depinde de arhitectura aplicației și cerințele de securitate.

CriteriuSession TokenJWT
ModelStateful (date pe server)Stateless (date în token)
RevocareImediată — ștergeți sesiunea din RedisNecesită listă neagră sau TTL scurt
Dimensiune16–64 de octeți500–2000 de octeți
Stocarea datelorDoar pe server (sigur)În interiorul tokenului (base64, necriptat)
ScalareNecesită stocare partajată (Redis)Nu necesită — tokenul este validat local
Protecție CSRFNecesită SameSite cookie + CSRF tokenNu este necesară (token în antet)

Când să alegeți Session Token

Session Token este preferat atunci când: este necesară revocarea imediată a sesiunilor (bancar, panouri de administrare), aplicația rulează pe unul sau mai multe servere cu Redis partajat, datele sesiunii sunt mari și nu încap în JWT, sau când echipa dorește să minimizeze riscul de scurgere a datelor prin decodificarea tokenului. În astfel de scenarii, session token asigură blocarea imediată a accesului la activitate suspectă — este suficient să ștergeți o înregistrare din Redis, iar toate sesiunile utilizatorului devin invalide.

Conform datelor Redis, 2025, utilizarea TTL la nivelul cheilor de sesiune (comanda EXPIRE) curăță automat sesiunile expirate, fără costuri suplimentare pentru sărciunile de fundal. Pentru sesiunile cu TTL de 1 oră și o încărcare de 10 000 de utilizatori simultani, Redis consumă aproximativ 1 GB de RAM la o dimensiune a sesiunii de 1 KB, ceea ce îl face eficient din punct de vedere economic pentru majoritatea aplicațiilor.

Securitatea Session Token

Securitatea session token se bazează pe două principii: tokenul trebuie să fie imprevizibil și protejat în timpul transmiterii și stocării. Amenințările principale — interceptarea tokenului (man-in-the-middle, XSS), predicția acestuia (generare slabă) și fixarea sesiunii (session fixation).

Protecția împotriva furtului de token

Protecția include: utilizarea HTTPS pentru toate cererile cu token, setarea unui TTL scurt al sesiunii (15–60 de minute de inactivitate), legarea sesiunii de IP și user-agent (verificare suplimentară la fiecare cerere), utilizarea flagurilor Secure și HttpOnly pentru cookie, rotația regulată a session token după operații sensibile (schimbarea parolei, creșterea drepturilor). OWASP recomandă, de asemenea, implementarea Gestionării sesiunilor cu invalidarea sesiunii vechi la crearea uneia noi după autentificare — acest lucru previne fixarea sesiunii.

Conform datelor OWASP ASVS, 2025, sesiunea trebuie legată de cel puțin doi factori: tokenul în sine (ce are clientul) și IP/user-agent (ce știe serverul). În cazul nepotrivirii acestor factori, serverul trebuie să încheie sesiunea și să solicite reautentificarea.

Exemplu de implementare în Kotlin

Mai jos este un exemplu de implementare pe server a session token în Kotlin folosind Spring Boot și Redis. Serverul generează un token criptografic sigur prin SecureRandom, salvează sesiunea în Redis cu TTL și o verifică la fiecare cerere. Codul demonstrează trei operații principale: crearea sesiunii, validarea și invalidarea.

kotlin
data class Session(
    val userId: Long,
    val role: String,
    val createdAt: Long,
    val lastAccess: Long
)

object SessionManager {
    private val redis = JedisPool("localhost", 6379)

    fun createSession(userId: Long, role: String): String {
        val token = generateSecureToken()
        val session = Session(userId, role, now(), now())
        redis.resource.use { conn ->
            conn.setex("session:$token", 3600, toJson(session))
        }
        return token
    }

    fun validateSession(token: String): Session? {
        redis.resource.use { conn ->
            val json = conn.get("session:$token") ?: return null
            return fromJson(json)
        }
    }

    fun invalidateSession(token: String) {
        redis.resource.use { it.del("session:$token") }
    }

    private fun generateSecureToken(): String {
        val bytes = ByteArray(32)
        SecureRandom().nextBytes(bytes)
        return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)
    }
}

Această implementare utilizează JedisPool pentru o conexiune thread-safe la Redis. Metoda createSession setează TTL de 1 oră (3600 de secunde) — după această perioadă, Redis va șterge automat înregistrarea. Metoda validateSession returnează null pentru sesiunile inexistente sau expirate, permițând serverului să proceseze corect o cerere cu un token invalid și să returneze HTTP 401.

Întrebări frecvente

Cu ce se deosebește session token de access token?

Session token — este un identificator al sesiunii pe server (stateful). Access token — sunt date de autentificare pentru accesul la API (poate fi JWT sau opaque). Session token este folosit de obicei pentru sesiunile web, access token — pentru cererile API în aplicații mobile și SPA. Ele pot coexista: session token pentru web, access token pentru API.

Cum să protejăm session token împotriva atacurilor XSS?

Principala protecție este setarea flagului HttpOnly pe cookie cu tokenul de sesiune. Acest flag interzice accesul la cookie din JavaScript, ceea ce face ca atacul XSS să fie inutil pentru furtul tokenului. În plus, flagul SameSite=Strict previne trimiterea cookie-ului cu cereri cross-site, protejând împotriva CSRF.

Cât timp ar trebui să trăiască un session token?

Sunt recomandate două timeouturi: absolut (8–24 de ore — durata maximă de viață a sesiunii) și relativ (15–30 de minute de inactivitate — după care sesiunea se încheie). Pentru aplicații bancare, timeoutul absolut se reduce la 1–2 ore, iar pentru clienții de e-mail poate ajunge la 7 zile.

Ce este fixarea sesiunii (session fixation)?

Session fixation — un atac în care atacatorul forțează utilizatorul să folosească un identificator de sesiune cunoscut. Protecția: după autentificarea reușită, serverul trebuie să creeze un nou session token, nu să continue să folosească cel transmis de client. Tokenul vechi trebuie invalidat, indiferent de originea sa.

Se poate folosi session token în REST API?

Da, session token este potrivit pentru REST API dacă clientul îl transmite în antetul Authorization (nu cookie). Pentru aplicații mobile, aceasta este o practică comună. Dezavantaj: la scalarea pe mai multe servere, va fi necesar un depozit comun de sesiuni (Redis), ceea ce adaugă un punct de defect în arhitectură.

Rezumat

  • Session Token — identificator stateful care face referire la datele sesiunii pe server
  • Avantaj — revocare imediată și control complet asupra sesiunilor pe server
  • Depozit — Redis, Memcached sau bază de date cu TTL pentru curățare automată
  • Securitate — generare SecureRandom, HTTPS, HttpOnly + SameSite cookie
  • Session vs JWT — Session se revocă mai ușor, JWT se scalează mai ușor
  • Timeouturi — absolut (8–24h) și relativ (15–30 min de inactivitate)
  • Session fixation — se previne prin crearea unui nou token după autentificare

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și