𝗦𝗲𝘀𝘀𝗶𝗼𝗻 𝗠𝗮𝗻𝗮𝗴𝗲𝗺𝗲𝗻𝘁 𝗶𝗻 𝗝𝗮𝘃𝗮 𝗪𝗲𝗯 𝗔𝗽𝗽𝗹𝗶𝗰𝗮𝘁𝗶𝗼𝗻𝘀

HTTP हे stateless आहे. आधुनिक वेब ॲप्ससाठी ही एक समस्या आहे.

सर्व्हरला तुम्ही कोण आहात हे लक्षात राहत नाही. प्रत्येक विनंती (request) ही एक नवीन विनंती असते. युजर्सना ट्रॅक करण्याचा मार्ग नसल्यास, शॉपिंग कार्ट्स गायब होतात आणि युजर्सना प्रत्येक क्लिकवर पुन्हा लॉग इन करावे लागते.

Session management ही समस्या सोडवते. हे विनंत्यांमधील (requests) एक दुवा तयार करते जेणेकरून सर्व्हरला तुम्ही कोण आहात हे समजते.

हे कसे कार्य करते:

  • तुम्ही लॉग इन करता.
  • सर्व्हर एक session तयार करतो.
  • सर्व्हर एक युनिक Session ID तयार करतो.
  • सर्व्हर ही ID तुमच्या ब्राउझरला पाठवतो.
  • तुमचा ब्राउझर प्रत्येक नवीन विनंतीसोबत ती ID परत पाठवतो.

Java डेव्हलपर्स हे व्यवस्थापित करण्यासाठी HttpSession interface चा वापर करतात. तुम्ही IDs किंवा roles सारखा युजर डेटा थेट session मध्ये स्टोअर करू शकता.

Sessions ट्रॅक करण्याच्या सामान्य पद्धती:

  • Cookies: सर्वात सामान्य पद्धत. ब्राउझर ही ID आपोआप हाताळतो.
  • URL Rewriting: जर युजरने cookies डिसेबल केल्या असतील तर ही पद्धत उपयुक्त ठरते.
  • Hidden Form Fields: मल्टी-स्टेप फॉर्म्ससाठी उपयुक्त.

सुरक्षा ही सर्वात मोठी चिंता आहे. अटॅकर्स युजर्सचे रूप धारण करण्यासाठी (impersonate करण्यासाठी) Session IDs चोरण्याचा प्रयत्न करतात.

या स्टेप्स वापरून तुमचे ॲप्लिकेशन सुरक्षित करा:

  • सर्व ट्रॅफिकसाठी HTTPS वापरा.
  • Cookies साठी HttpOnly सेट करा जेणेकरून JavaScript त्यांना चोरू शकणार नाही.
  • Secure flag वापरा जेणेकरून cookies फक्त एन्क्रिप्टेड कनेक्शन्सद्वारेच प्रवास करतील.
  • CSRF अटॅक्स रोखण्यासाठी SameSite=Strict वापरा.
  • लॉगआउट करताना नेहमी session.invalidate() कॉल करा.

मोठ्या एंटरप्राइझ ॲप्ससाठी एक सर्व्हर पुरेसा नसतो. जर तुमच्याकडे अनेक सर्व्हर्स असतील, तर Server B ला Server A वर तयार झालेल्या session बद्दल माहिती असणार नाही.

हे सोडवण्यासाठी, distributed session management वापरा:

  • Sticky Sessions: लोड बॅलन्सर तुम्हाला प्रत्येक वेळी त्याच सर्व्हरवर पाठवतो.
  • Database Storage: सर्व सर्व्हर्स एका मध्यवर्ती डेटाबेसची तपासणी करतात.
  • Redis: हे इंडस्ट्री स्टँडर्ड आहे. हे वेगवान आहे आणि सहजपणे स्केल करता येते.

तुम्हाला Sessions आणि JWTs मधील फरक देखील माहित असणे आवश्यक आहे. Sessions डेटा सर्व्हरवर स्टोअर करतात. JWTs डेटा क्लायंटवर स्टोअर करतात. Sessions नियंत्रित करणे सोपे आहे, तर microservices साठी JWTs अधिक चांगले आहेत.

या संकल्पनांवर प्रभुत्व मिळवल्यामुळे तुम्हाला सुरक्षित आणि स्केलेबल सॉफ्टवेअर तयार करण्यास मदत होते.

Source: https://dev.to/naveenkumar1/session-management-in-java-web-applications-38od