𝗦𝗲𝘀𝘀𝗶𝗼𝗻 𝗠𝗮𝗻𝗮𝗴𝗲𝗺𝗲𝗻𝘁 𝗶𝗻 𝗝𝗮𝘃𝗮 𝗪𝗲𝗯 𝗔𝗽𝗽𝗹𝗶𝗰𝗮𝘁𝗶𝗼𝗻𝘀
HTTP என்பது stateless. இது நவீன வெப் அப்ளிகேஷன்களுக்கு ஒரு பிரச்சனையாகும்.
சர்வர் உங்களை நினைவில் வைத்துக்கொள்ளாது. ஒவ்வொரு கோரிக்கையும் (request) ஒரு புதிய கோரிக்கையாகவே இருக்கும். பயனர்களைக் கண்காணிக்கும் வழிமுறை இல்லையென்றால், ஷாப்பிங் கார்டுகள் (shopping carts) மறைந்துவிடும் மற்றும் பயனர்கள் ஒவ்வொரு முறையும் மீண்டும் லாக்-இன் செய்ய வேண்டியிருக்கும்.
Session management இதைச் சரிசெய்கிறது. இது கோரிக்கைகளுக்கு இடையே ஒரு இணைப்பை உருவாக்குகிறது, இதன் மூலம் சர்வர் நீங்கள் யார் என்பதைத் தெரிந்துகொள்ளும்.
இது எவ்வாறு செயல்படுகிறது:
- நீங்கள் லாக்-இன் செய்கிறீர்கள்.
- சர்வர் ஒரு session-ஐ உருவாக்குகிறது.
- சர்வர் ஒரு தனித்துவமான Session ID-ஐ உருவாக்குகிறது.
- சர்வர் இந்த ID-ஐ உங்கள் பிரவுசருக்கு அனுப்புகிறது.
- உங்கள் பிரவுசர் ஒவ்வொரு புதிய கோரிக்கையுடனும் அந்த ID-ஐ மீண்டும் அனுப்புகிறது.
ஜாவா டெவலப்பர்கள் இதை நிர்வகிக்க HttpSession interface-ஐப் பயன்படுத்துகின்றனர். ID அல்லது roles போன்ற பயனர் தரவுகளை நேரடியாக session-இல் சேமிக்க முடியும்.
செஷன்களைக் கண்காணிக்கப் பொதுவான வழிகள்:
- Cookies: மிகவும் பொதுவான முறை. பிரவுசர் இந்த ID-ஐ தானாகவே கையாளும்.
- URL Rewriting: பயனர் cookies-ஐ முடக்கிவிட்டால் இது பயனுள்ளதாக இருக்கும்.
- Hidden Form Fields: பல படிநிலைகளைக் கொண்ட படிவங்களுக்கு (multi-step forms) இது சிறந்தது.
பாதுகாப்பே மிகப்பெரிய கவலை. தாக்குபவர்கள் பயனர்களைப் போலத் தோற்றமளிக்க Session ID-களைத் திருட முயற்சிப்பார்கள்.
பின்வரும் படிகள் மூலம் உங்கள் அப்ளிகேஷனைப் பாதுகாக்கவும்:
- அனைத்துப் போக்குவரத்திற்கும் HTTPS-ஐப் பயன்படுத்தவும்.
- JavaScript மூலம் திருடப்படாமல் இருக்க cookies-ஐ
HttpOnlyஎன அமைக்கவும். - cookies என்க்ரிப்ட் செய்யப்பட்ட இணைப்புகள் வழியாக மட்டுமே செல்ல
Secureflag-ஐப் பயன்படுத்தவும். - CSRF தாக்குதல்களைத் தடுக்க
SameSite=Strict-ஐப் பயன்படுத்தவும். - லாக்-அவுட் செய்யும் போது எப்போதும்
session.invalidate()என்பதை அழைக்கவும்.
பெரிய நிறுவன அப்ளிகேஷன்களுக்கு (enterprise apps), ஒரு சர்வர் போதுமானதல்ல. உங்களிடம் பல சர்வர்கள் இருந்தால், சர்வர் A-வில் உருவாக்கப்பட்ட session பற்றி சர்வர் B-க்குத் தெரியாது.
இதைத் தீர்க்க, distributed session management-ஐப் பயன்படுத்தவும்:
- Sticky Sessions: லோட் பேலன்சர் (load balancer) உங்களை ஒவ்வொரு முறையும் அதே சர்வருக்கு அனுப்பும்.
- Database Storage: அனைத்து சர்வர்களும் ஒரு மையத் தரவுத்தளத்தைச் (central database) சரிபார்க்கும்.
- Redis: இது தொழில்துறையின் தரநிலையாகும் (industry standard). இது வேகமானது மற்றும் எளிதாக விரிவாக்கம் (scale) செய்யக்கூடியது.
Sessions மற்றும் JWTs ஆகியவற்றிற்கு இடையிலான வித்தியாசத்தையும் நீங்கள் தெரிந்து கொள்ள வேண்டும். Sessions தரவை சர்வரில் சேமிக்கிறது. JWTs தரவை கிளையண்டில் (client) சேமிக்கிறது. Sessions-ஐக் கட்டுப்படுத்துவது எளிது, ஆனால் microservices-களுக்கு JWTs சிறந்தவை.
இந்தக் கருத்துக்களைக் கற்றுக்கொள்வது பாதுகாப்பான மற்றும் விரிவாக்கக்கூடிய (scalable) மென்பொருட்களை உருவாக்க உங்களுக்கு உதவும்.
Source: https://dev.to/naveenkumar1/session-management-in-java-web-applications-38od