𝗦𝗲𝘀𝘀𝗶𝗼𝗻 𝗠𝗮𝗻𝗮𝗴𝗲𝗺𝗲𝗻𝘁 𝗶𝗻 𝗝𝗮𝘃𝗮 𝗪𝗲𝗯 𝗔𝗽𝗽𝗹𝗶𝗰𝗮𝘁𝗶𝗼𝗻𝘀
HTTP என்பது stateless (நிலைத்தன்மையற்றது). அதாவது, உலாவியிலிருந்து (browser) வரும் ஒவ்வொரு கோரிக்கையும் (request) ஒரு புதிய தொடர்பாகும். நீங்கள் யார் அல்லது ஒரு வினாடிக்கு முன்பு நீங்கள் என்ன செய்தீர்கள் என்பதை சர்வர் நினைவில் வைத்துக்கொள்ளாது.
Session management இல்லையென்றால், இணையதளங்கள் சரியாகச் செயல்படாது.
- ஒவ்வொரு முறை பக்கத்தைக் கிளிக் செய்யும் போதும் நீங்கள் லாகின் செய்ய வேண்டியிருக்கும்.
- ஒவ்வொரு நகர்விற்குப் பிறகும் ஷாப்பிங் கார்டுகள் காலியாகிவிடும்.
- தனிப்பட்ட அமைப்புகள் (Personal settings) உடனடியாக மறைந்துவிடும்.
Session management தொடர்ச்சியை உருவாக்குகிறது. இது பல கோரிக்கைகளை (requests) ஒரே பயனருடன் இணைக்க சர்வரை அனுமதிக்கிறது.
இது எவ்வாறு செயல்படுகிறது:
- பயனர் லாகின் செய்கிறார்.
- சர்வர் ஒரு session-ஐ உருவாக்குகிறது.
- சர்வர் ஒரு தனித்துவமான Session ID-ஐ உருவாக்குகிறது.
- சர்வர் இந்த ID-ஐ உலாவியில் (browser) அனுப்புகிறது.
- உலாவியானது ஒவ்வொரு புதிய கோரிக்கையுடனும் அந்த ID-ஐ மீண்டும் அனுப்புகிறது.
இதை நிர்வகிக்க Java, HttpSession interface-ஐப் பயன்படுத்துகிறது. பயனர் ஐடிகள் (user IDs) அல்லது பொறுப்புகளை (roles) போன்ற தரவுகளை நீங்கள் நேரடியாக session-இல் சேமிக்கலாம்.
பொதுவான கண்காணிப்பு முறைகள்:
- Cookies: மிகவும் பொதுவான வழி. சர்வர் ஒரு JSESSIONID cookie-ஐ அனுப்புகிறது. மீதமுள்ளவற்றை உலாவியே கவனித்துக்கொள்ளும்.
- URL Rewriting: இணைய முகவரியுடன் (web address) இந்த ID சேர்க்கப்படுகிறது. பயனர்கள் cookies-ஐ முடக்கி வைத்தால் இது வேலை செய்யும்.
- Hidden Form Fields: ID ஆனது HTML forms-க்குள் இருக்கும்.
பாதுகாப்பே மிகப்பெரிய சவாலாகும். ஒரு தாக்குதல் நடத்துபவர் (attacker) Session ID-ஐத் திருடிவிட்டால், அவர் பயனரைப் போல நடித்து (impersonate) செயல்பட முடியும்.
பாதுகாப்பாக இருக்க இந்த விதிகளைப் பின்பற்றுங்கள்:
- JavaScript திருட்டைத் தடுக்க HttpOnly cookies-ஐப் பயன்படுத்தவும்.
- தரவுகள் HTTPS வழியாக மட்டுமே பயணிப்பதை உறுதி செய்ய Secure cookies-ஐப் பயன்படுத்தவும்.
- CSRF தாக்குதல்களைத் தடுக்க SameSite அமைப்புகளைப் பயன்படுத்தவும்.
- பயனர் லாக் அவுட் செய்யும்போது எப்போதும்
session.invalidate()என்பதை அழைக்கவும். - Fixation தாக்குதல்களைத் தடுக்க லாகின் செய்த பிறகு ஒரு புதிய session-ஐ உருவாக்கவும்.
பெரிய நிறுவனங்களுக்கான விரிவாக்கம் (Scaling): சாதாரண sessions ஒரு சர்வரில் மட்டுமே செயல்படும். ஆனால் பெரிய அப்ளிகேஷன்கள் ஒரு load balancer-க்கு பின்னால் பல சர்வர்களைப் பயன்படுத்துகின்றன. உங்கள் session சர்வர் A-வில் இருந்தால், சர்வர் B உங்களைப் பற்றி அறியாது.
இதைச் சரிசெய்ய, நிபுணர்கள் இதைப் பயன்படுத்துகின்றனர்:
- Sticky Sessions: load balancer ஒவ்வொரு முறையும் உங்களை ஒரே சர்வருக்கு அனுப்புகிறது.
- Distributed Caching: அனைத்து சர்வர்களும் Redis போன்ற ஒரு மையச் சேமிப்பகத்துடன் (central store) இணைக்கப்பட்டுள்ளன. இதுதான் தொழில்துறை தரநிலை (industry standard).
நவீன அப்ளிகேஷன்கள் JWTs (JSON Web Tokens)-ஐயும் பயன்படுத்துகின்றன. Sessions போலல்லாமல், JWTs stateless ஆகும். தரவு சர்வரில் இருக்காது, அது டோக்கனிலேயே (token) இருக்கும். இது microservices-களை விரிவாக்குவதை எளிதாக்குகிறது.
Session-களைத் திறம்படக் கையாள்வது, பாதுகாப்பான மற்றும் தொழில்முறை ஜாவா அப்ளிகேஷன்களை உருவாக்க உங்களுக்கு உதவும்.
Source: https://dev.to/naveenkumar1/session-management-in-java-web-applications-38od
Optional learning community: https://t.me/GyaanSetuAi