Session Token एक अद्वितीय पहचानकर्ता है जिसे सर्वर उपयोगकर्ता के सफल प्रमाणीकरण के बाद बनाता है और बाद के अनुरोधों की पहचान करने के लिए उपयोग करता है। स्व-निहित टोकन (JWT) के विपरीत, session token एक यादृच्छिक स्ट्रिंग है जो अपने आप में डेटा नहीं रखती: सभी सत्र जानकारी सर्वर पर RAM या डेटाबेस में संग्रहीत होती है। OAuth.com, 2025 के अनुसार, session token सर्वर-साइड वेब एप्लिकेशन और हाइब्रिड मोबाइल आर्किटेक्चर में सबसे सामान्य प्रमाणीकरण तंत्र बना हुआ है।
मुख्य बिंदु
Session Token (सत्र पहचानकर्ता) एक अद्वितीय स्ट्रिंग है जिसे सर्वर उपयोगकर्ता प्रमाणीकरण के बाद उत्पन्न करता है और सत्र डेटा से जोड़ता है। टोकन में उपयोगकर्ता की कोई जानकारी नहीं होती — यह केवल सर्वर पर संग्रहीत डेटा की एक कुंजी है। इस दृष्टिकोण को stateful प्रमाणीकरण कहा जाता है: सर्वर प्रत्येक सक्रिय सत्र की स्थिति संग्रहीत करता है और प्रत्येक अनुरोध पर इसकी जाँच करता है।
सत्र डेटा में शामिल हैं: उपयोगकर्ता आईडी, लॉगिन समय, IP पता, user-agent, अनुमति सूची, अंतिम गतिविधि का समय। जब क्लाइंट session token के साथ अनुरोध भेजता है, सर्वर सत्र भंडार में संबंधित रिकॉर्ड ढूँढता है, उसकी वैधता जाँचता है, और अनुरोध प्रसंस्करण के लिए डेटा प्राप्त करता है। यदि सत्र रिकॉर्ड अनुपस्थित या समाप्त हो गया है, सर्वर प्रमाणीकरण त्रुटि लौटाता है और पुनः लॉगिन की आवश्यकता होती है।
OWASP, 2025 के अनुसार, session token उन अनुप्रयोगों के लिए मानक बना हुआ है जहाँ तत्काल पहुँच रद्दीकरण आवश्यक है — उदाहरण के लिए, बैंकिंग सिस्टम और कॉर्पोरेट पोर्टल में जहाँ प्रशासक को उपयोगकर्ता के सत्र को तुरंत समाप्त करने में सक्षम होना चाहिए। ऐसे सिस्टम में, session token पहुँच पर पूर्ण नियंत्रण प्रदान करता है जो बिना अतिरिक्त अवरोधन तंत्र के stateless टोकन के लिए अप्राप्य है।
प्रक्रिया तब शुरू होती है जब क्लाइंट प्रमाणीकरण सर्वर को क्रेडेंशियल भेजता है। सर्वर लॉगिन और पासवर्ड सत्यापित करता है, भंडार (आमतौर पर Redis या डेटाबेस) में सत्र रिकॉर्ड बनाता है, और क्लाइंट को एक अद्वितीय session token लौटाता है। क्लाइंट टोकन संग्रहीत करता है और इसे प्रत्येक बाद के अनुरोध के साथ भेजता है, और सर्वर हर बार सत्र के अस्तित्व और वैधता की जाँच करता है।
Redis इन-मेमोरी भंडारण और TTL (समय-से-जीवन) समर्थन के कारण सबसे लोकप्रिय सत्र भंडार है। प्रत्येक सत्र को कुंजी-मान जोड़ी के रूप में संग्रहीत किया जाता है, जहाँ कुंजी session token है और मान सत्र डेटा के साथ एक JSON ऑब्जेक्ट है। TTL स्वचालित रूप से समाप्त सत्रों को हटाता है। विकल्प: Memcached (केवल मेमोरी, डिस्क पर सहेजे बिना), PostgreSQL/MySQL (स्थायी लेकिन धीमा), और DynamoDB (AWS बुनियादी ढाँचे के लिए)।
Redis में सत्र संरचना का उदाहरण: session:{token} → {“userId”: 42, “role”: “admin”, “createdAt”: 1812345678, “lastAccess”: 1812345678}। सर्वर प्रत्येक अनुरोध पर lastAccess अपडेट करता है, जो निष्क्रियता टाइमआउट लागू करने की अनुमति देता है — निष्क्रियता की अवधि के बाद स्वचालित सत्र समाप्ति।
Session Token दो तरीकों से प्रेषित किया जा सकता है: HTTP कुकी के माध्यम से या Authorization HTTP हेडर के माध्यम से। कुकी वेब एप्लिकेशन के लिए पारंपरिक तरीका है: सर्वर HttpOnly (JavaScript के लिए दुर्गम), Secure (केवल HTTPS), और SameSite (CSRF सुरक्षा) फ़्लैग्स के साथ कुकी सेट करता है। मोबाइल एप्लिकेशन के लिए, Authorization: Bearer <session_token> हेडर अधिक सामान्यतः उपयोग किया जाता है, क्योंकि कुकी तंत्र मूल क्लाइंट में हमेशा सुविधाजनक नहीं होता।
Session Token का जीवनचक्र तीन चरणों में विभाजित है: निर्माण, सक्रिय सत्र का रखरखाव, और समाप्ति। प्रत्येक चरण में टोकन लीकेज या अवरोधन को रोकने के लिए उचित सुरक्षा कॉन्फ़िगरेशन की आवश्यकता होती है।
निर्माण — सर्वर 128–256 बिट की क्रिप्टोग्राफिक रूप से मजबूत यादृच्छिक स्ट्रिंग उत्पन्न करता है (उदाहरण के लिए, Java में SecureRandom या Python में os.urandom के माध्यम से)। टोकन अप्रत्याशित होना चाहिए — एंट्रॉपी के बिना UUID या टाइमस्टैम्प का उपयोग अस्वीकार्य है। भंडारण क्लाइंट पर: iOS में — Keychain, Android में — EncryptedSharedPreferences, वेब में — HttpOnly कुकी। विलोपन लॉगआउट पर होता है: क्लाइंट भंडार से टोकन हटाता है, सर्वर Redis से सत्र रिकॉर्ड हटाता है। लॉगआउट के बाद, session token बेकार हो जाता है — सर्वर को संबंधित रिकॉर्ड नहीं मिलेगा।
SANS Institute, 2025 के अनुसार, सत्र समाप्ति का सही कार्यान्वयन (सर्वर-साइड सफाई के साथ लॉगआउट) चुराए गए टोकन का उपयोग करके 70% तक हमलों को रोकता है। केवल क्लाइंट पर टोकन हटाना ही नहीं, बल्कि सर्वर पर सत्र को भी अमान्य करना महत्वपूर्ण है।
Session Token और JWT प्रमाणीकरण के दो अलग-अलग दृष्टिकोण प्रस्तुत करते हैं। Session Token stateful है (सर्वर स्थिति संग्रहीत करता है), JWT stateless है (डेटा टोकन के अंदर)। उनके बीच चयन एप्लिकेशन आर्किटेक्चर और सुरक्षा आवश्यकताओं पर निर्भर करता है।
| मापदंड | Session Token | JWT |
|---|---|---|
| मॉडल | Stateful (डेटा सर्वर पर) | Stateless (डेटा टोकन में) |
| रद्दीकरण | तत्काल — Redis से सत्र हटाएँ | ब्लैकलिस्ट या छोटे TTL की आवश्यकता |
| आकार | 16–64 बाइट्स | 500–2000 बाइट्स |
| डेटा भंडारण | केवल सर्वर पर (सुरक्षित) | टोकन के अंदर (base64, एन्क्रिप्टेड नहीं) |
| स्केलिंग | साझा भंडारण (Redis) आवश्यक | आवश्यक नहीं — टोकन स्थानीय रूप से मान्य किया जाता है |
| CSRF सुरक्षा | SameSite कुकी + CSRF टोकन आवश्यक | आवश्यक नहीं (टोकन हेडर में) |
Session Token बेहतर है जब: तत्काल सत्र रद्दीकरण आवश्यक हो (बैंकिंग, व्यवस्थापक पैनल), एप्लिकेशन एक या कई सर्वरों पर साझा Redis के साथ चलता हो, सत्र डेटा बड़ा हो और JWT में फिट न हो, या टीम टोकन डिकोडिंग के माध्यम से डेटा लीकेज के जोखिम को कम करना चाहती हो। ऐसे परिदृश्यों में, session token संदिग्ध गतिविधि पर तत्काल पहुँच अवरोधन प्रदान करता है — Redis से एक रिकॉर्ड हटाने मात्र से उपयोगकर्ता के सभी सत्र अमान्य हो जाते हैं।
Redis, 2025 के अनुसार, सत्र कुंजी स्तर पर TTL (EXPIRE कमांड) का उपयोग पृष्ठभूमि कार्यों पर ओवरहेड के बिना समाप्त सत्रों को स्वचालित रूप से साफ करता है। 1 घंटे के TTL और 10,000 समवर्ती उपयोगकर्ताओं के भार वाले सत्रों के लिए, Redis 1 KB सत्र आकार पर लगभग 1 GB RAM की खपत करता है, जो इसे अधिकांश एप्लिकेशन के लिए लागत-प्रभावी बनाता है।
Session Token की सुरक्षा दो सिद्धांतों पर आधारित है: टोकन अप्रत्याशित होना चाहिए और संचरण और भंडारण के दौरान संरक्षित होना चाहिए। मुख्य खतरे हैं टोकन का अवरोधन (man-in-the-middle, XSS), इसका पूर्वानुमान (कमजोर जनरेशन), और सत्र स्थिरीकरण (session fixation)।
सुरक्षा में शामिल है: टोकन वाले सभी अनुरोधों के लिए HTTPS का उपयोग, छोटा सत्र TTL (15–60 मिनट निष्क्रियता) सेट करना, सत्र को IP और user-agent से बांधना (प्रत्येक अनुरोध पर अतिरिक्त सत्यापन), कुकी के लिए Secure और HttpOnly फ़्लैग्स का उपयोग, और संवेदनशील संचालन (पासवर्ड परिवर्तन, विशेषाधिकार वृद्धि) के बाद नियमित session token रोटेशन। OWASP लॉगिन के बाद नया सत्र बनाते समय पुराने सत्र को अमान्य करने के साथ सत्र प्रबंधन लागू करने की भी सिफारिश करता है — यह session fixation को रोकता है।
OWASP ASVS, 2025 के अनुसार, सत्र कम से कम दो कारकों से बंधा होना चाहिए: स्वयं टोकन (जो क्लाइंट के पास है) और IP/user-agent (जो सर्वर जानता है)। यदि ये कारक मेल नहीं खाते, तो सर्वर को सत्र समाप्त करना चाहिए और पुनः प्रमाणीकरण की आवश्यकता होनी चाहिए।
नीचे Spring Boot और Redis का उपयोग करके Kotlin में सर्वर-साइड session token कार्यान्वयन का उदाहरण दिया गया है। सर्वर SecureRandom के माध्यम से क्रिप्टोग्राफिक रूप से मजबूत टोकन उत्पन्न करता है, TTL के साथ Redis में सत्र सहेजता है, और प्रत्येक अनुरोध पर इसकी जाँच करता है। कोड तीन मुख्य संचालन प्रदर्शित करता है: सत्र निर्माण, सत्यापन और अमान्यकरण।
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)
}
}
यह कार्यान्वयन Redis से थ्रेड-सेफ कनेक्शन के लिए JedisPool का उपयोग करता है। createSession विधि 1 घंटे (3600 सेकंड) का TTL सेट करती है — इस अवधि के बाद Redis स्वचालित रूप से रिकॉर्ड हटा देगा। validateSession विधि गैर-मौजूद या समाप्त सत्रों के लिए null लौटाती है, जिससे सर्वर अमान्य टोकन वाले अनुरोध को सही ढंग से संभाल सकता है और HTTP 401 लौटा सकता है।
अक्सर पूछे जाने वाले प्रश्न
Session token सर्वर-साइड सत्र पहचानकर्ता (stateful) है। Access token API तक पहुँच के लिए क्रेडेंशियल है (JWT या opaque हो सकता है)। Session token आमतौर पर वेब सत्रों के लिए उपयोग किया जाता है, access token मोबाइल और SPA एप्लिकेशन में API अनुरोधों के लिए। वे सह-अस्तित्व में रह सकते हैं: वेब के लिए session token, API के लिए access token।
मुख्य सुरक्षा सत्र टोकन वाली कुकी पर HttpOnly फ़्लैग सेट करना है। यह फ़्लैग JavaScript से कुकी तक पहुँच को रोकता है, जिससे XSS हमले टोकन चुराने के लिए बेकार हो जाते हैं। इसके अतिरिक्त, SameSite=Strict फ़्लैग क्रॉस-साइट अनुरोधों के साथ कुकी भेजने को रोकता है, CSRF से बचाता है।
दो टाइमआउट अनुशंसित हैं: पूर्ण (8–24 घंटे — अधिकतम सत्र जीवनकाल) और सापेक्ष (15–30 मिनट निष्क्रियता — जिसके बाद सत्र समाप्त हो जाता है)। बैंकिंग एप्लिकेशन के लिए, पूर्ण टाइमआउट घटाकर 1–2 घंटे कर दिया जाता है; ईमेल क्लाइंट के लिए, यह 7 दिनों तक हो सकता है।
Session fixation एक हमला है जिसमें हमलावर उपयोगकर्ता को ज्ञात सत्र पहचानकर्ता का उपयोग करने के लिए मजबूर करता है। सुरक्षा: सफल प्रमाणीकरण के बाद, सर्वर को क्लाइंट द्वारा भेजे गए टोकन का उपयोग जारी रखने के बजाय नया session token बनाना चाहिए। पुराने टोकन को उसके मूल स्रोत की परवाह किए बिना अमान्य किया जाना चाहिए।
हाँ, session token REST API के लिए उपयुक्त है यदि क्लाइंट इसे Authorization हेडर (कुकी नहीं) में भेजता है। मोबाइल एप्लिकेशन के लिए, यह सामान्य अभ्यास है। कमी: कई सर्वरों पर स्केल करते समय, साझा सत्र भंडार (Redis) की आवश्यकता होती है, जो आर्किटेक्चर में विफलता का एक बिंदु जोड़ता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें