HttpSession: Session Tracking, Attributes, and Invalidation
HttpSession: Session Tracking, Attributes, and Invalidation
Introduction
जब हम web applications बनाते हैं, तो एक बड़ी problem आती है — user data को page से page तक कैसे maintain करें? क्योंकि HTTP protocol stateless होता है, यानी हर request independent होती है। इस problem को solve करने के लिए Java Servlet API हमें एक powerful concept देता है — HttpSession।
HttpSession का main purpose है — session tracking, यानी user के साथ server की communication को track करना और उसके data को temporarily store करना ताकि user की activity को maintain किया जा सके।
What is Session Tracking?
Session tracking का मतलब होता है — किसी user की multiple requests को एक साथ जोड़ना ताकि server यह समझ सके कि कौन-सी request किस user की है। जब कोई user किसी website में login करता है और pages browse करता है, तो हमें यह जानना जरूरी होता है कि ये सारे requests उसी user के हैं।
Java Servlet में session tracking के लिए कई तरीके हैं:
- Cookies
- Hidden Form Fields
- URL Rewriting
- HttpSession (सबसे common और reliable)
What is HttpSession?
HttpSession एक interface है जो javax.servlet.http package में मौजूद है। इसका use server और client के बीच एक session create करने और manage करने के लिए किया जाता है। जब कोई user पहली बार website visit करता है, तो server एक unique session बनाता है और उसे user से connect कर देता है।
हर session का एक unique session ID होता है जो server और client दोनों को identify करने में मदद करता है।
Session Creation Example
HttpSession session = request.getSession();
ऊपर दिए code से server एक session create करता है (अगर पहले से exist नहीं करता), और उस user के लिए unique session object return करता है।
Important Methods of HttpSession
HttpSession interface कई useful methods provide करता है जिससे session को manage करना आसान हो जाता है। नीचे एक table में उनके नाम और काम समझाए गए हैं।
| Method | Description |
|---|---|
getId() |
Session का unique ID return करता है। |
getCreationTime() |
Session कब create हुआ था, उसका time देता है। |
getLastAccessedTime() |
Session को आखिरी बार कब access किया गया, बताता है। |
setAttribute(String name, Object value) |
Session में data (attribute) store करता है। |
getAttribute(String name) |
Session से stored data retrieve करता है। |
removeAttribute(String name) |
Session से specific data remove करता है। |
invalidate() |
Session को destroy कर देता है। |
Session Tracking Flow
Session tracking का basic flow कुछ इस तरह होता है:
- User server को पहली request भेजता है।
- Server एक new session create करता है और उसे unique session ID देता है।
- Server यह session ID client को cookie या URL के रूप में भेजता है।
- जब client अगली बार request भेजता है, तो वही session ID साथ भेजी जाती है।
- Server session ID देखकर user को पहचान लेता है और उसका data access करता है।
Session Attributes
Session में data store करने के लिए हम attributes का use करते हैं। Attributes basically key-value pairs होते हैं जिनके जरिए हम user-specific data store कर सकते हैं, जैसे username, email, cart items आदि।
Storing Data in Session
HttpSession session = request.getSession();
session.setAttribute("user", "Ravi");
session.setAttribute("email", "ravi@example.com");
Retrieving Data from Session
String user = (String) session.getAttribute("user");
String email = (String) session.getAttribute("email");
Removing Data from Session
session.removeAttribute("user");
Session Invalidation
Session invalidation का मतलब होता है session को खत्म करना यानी session data को delete कर देना। जब user logout करता है या session expire हो जाता है, तो server automatically session को invalidate कर देता है।
Manually Invalidate Session
session.invalidate();
जैसे ही invalidate() method call किया जाता है, उस session से जुड़े सारे attributes remove हो जाते हैं और session दुबारा use नहीं किया जा सकता।
Session Timeout
हर session का एक default timeout period होता है (usually 30 minutes)। अगर user इतने समय तक inactive रहता है, तो session automatically expire हो जाता है।
Setting Session Timeout in Servlet
session.setMaxInactiveInterval(300); // 300 seconds = 5 minutes
Setting Session Timeout in web.xml
<session-config>
<session-timeout>10</session-timeout>
</session-config>
ऊपर दिए गए code में session timeout 10 minutes के लिए set किया गया है। यानी अगर user 10 minutes तक कोई action नहीं करेगा, तो session expire हो जाएगा।
HttpSession vs Cookies
कई बार confusion होता है कि Cookies और HttpSession में क्या फर्क है। नीचे table में इसका clear comparison दिया गया है।
| Feature | Cookies | HttpSession |
|---|---|---|
| Storage | Client-side (Browser में) | Server-side |
| Security | कम Secure (User edit कर सकता है) | ज्यादा Secure (Server controlled) |
| Data Size | Limited (4KB तक) | Unlimited (Server memory पर depend) |
| Performance | Fast (क्योंकि client-side है) | थोड़ा slow (server processing में) |
| Use Case | Simple data जैसे preferences | Complex data जैसे login info |
Session Example: Shopping Cart
मान लो एक online shopping site है। जब user products को add करता है, तो हर item को server-side store करना होता है ताकि user जब तक website पर है, उसकी cart safe रहे। यहाँ HttpSession बहुत काम आता है।
Example Code
HttpSession session = request.getSession();
ArrayList<String> cart = (ArrayList<String>) session.getAttribute("cart");
if(cart == null){
cart = new ArrayList<>();
}
cart.add("Laptop");
session.setAttribute("cart", cart);
इस example में user द्वारा add किए गए products session में store हो जाते हैं। जब तक session valid है, user की cart safe रहती है।
Session Events and Listener
Java Servlet API session से जुड़े events को भी track करने की सुविधा देता है। इसके लिए हम HttpSessionListener interface implement करते हैं।
Important Listener Methods
- sessionCreated() — जब नया session create होता है।
- sessionDestroyed() — जब session invalidate या expire होता है।
Example
public class MySessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent e) {
System.out.println("Session Created: " + e.getSession().getId());
}
public void sessionDestroyed(HttpSessionEvent e) {
System.out.println("Session Destroyed: " + e.getSession().getId());
}
}
Best Practices for Using HttpSession
- Session में unnecessary data store न करें — इससे memory पर load बढ़ता है।
- Session timeout को proper तरीके से manage करें।
- Sensitive data (जैसे password) session में plain text में store न करें।
- Session invalidation का use logout के समय जरूर करें।
- Session ID को secure तरीके से transmit करें (जैसे HTTPS के जरिए)।
Real World Use of HttpSession
HttpSession का use हर dynamic web application में होता है, जैसे —
- Login system में user authentication और authorization।
- E-commerce में cart और checkout process।
- Online exams में user answers को store करने के लिए।
- Feedback forms और tracking में user details maintain करने के लिए।
Summary
HttpSession Java Servlets का एक बहुत ही powerful feature है जो web application में user data को manage करने में मदद करता है। यह developer को simple तरीके से state maintain करने की सुविधा देता है। Proper use करने पर यह application को both user-friendly और secure बनाता है।