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

HTTP എന്നത് സ്റ്റേറ്റ്‌ലെസ്സ് (stateless) ആണ്. അതായത്, ഒരു ബ്രൗസറിൽ നിന്നുള്ള ഓരോ അഭ്യർത്ഥനയും (request) തികച്ചും പുതിയൊരു ഇടപെടലാണ്. നിങ്ങൾ ആരാണെന്നോ ഒരു സെക്കൻഡ് മുമ്പ് നിങ്ങൾ എന്താണ് ചെയ്തതെന്നോ സെർവറിന് ഓർമ്മയുണ്ടാവില്ല.

സെഷൻ മാനേജ്‌മെന്റ് ഇല്ലെങ്കിൽ വെബ്‌സൈറ്റുകൾ ശരിയായി പ്രവർത്തിക്കില്ല.

  • ഓരോ പേജ് ക്ലിക്ക് ചെയ്യുമ്പോഴും നിങ്ങൾ വീണ്ടും ലോഗിൻ ചെയ്യേണ്ടി വരും.
  • ഓരോ നീക്കത്തിന് ശേഷവും ഷോപ്പിംഗ് കാർട്ടുകൾ കാലിയാകും.
  • വ്യക്തിഗത ക്രമീകരണങ്ങൾ (Personal settings) പെട്ടെന്ന് തന്നെ അപ്രത്യക്ഷമാകും.

സെഷൻ മാനേജ്‌മെന്റ് തുടർച്ച നിലനിർത്താൻ സഹായിക്കുന്നു. ഒന്നിലധികം അഭ്യർത്ഥനകളെ (requests) ഒരു ഉപയോക്താവുമായി ബന്ധിപ്പിക്കാൻ ഇത് സെർവറിനെ അനുവദിക്കുന്നു.

ഇത് എങ്ങനെ പ്രവർത്തിക്കുന്നു:

  1. ഉപയോക്താവ് ലോഗിൻ ചെയ്യുന്നു.
  2. സെർവർ ഒരു സെഷൻ നിർമ്മിക്കുന്നു.
  3. സെർവർ ഒരു യുണീക് (unique) Session ID നിർമ്മിക്കുന്നു.
  4. സെർവർ ഈ ID ബ്രൗസറിലേക്ക് അയക്കുന്നു.
  5. ഓരോ പുതിയ അഭ്യർത്ഥനയോടൊപ്പവും ബ്രൗസർ ഈ ID തിരികെ അയക്കുന്നു.

ഇത് കൈകാര്യം ചെയ്യാൻ Java-യിൽ HttpSession ഇന്റർഫേസ് ആണ് ഉപയോഗിക്കുന്നത്. യൂസർ ഐഡികൾ (user IDs) അല്ലെങ്കിൽ റോളുകൾ (roles) പോലുള്ള വിവരങ്ങൾ നിങ്ങൾക്ക് നേരിട്ട് സെഷനിൽ സംഭരിക്കാം.

സാധാരണയായി ഉപയോഗിക്കുന്ന ട്രാക്കിംഗ് രീതികൾ:

  • Cookies: ഏറ്റവും സാധാരണമായ രീതി. സെർവർ ഒരു JSESSIONID കുക്കി (cookie) അയക്കുന്നു. ബാക്കി കാര്യങ്ങൾ ബ്രൗസർ കൈകാര്യം ചെയ്യുന്നു.
  • URL Rewriting: വെബ് അഡ്രസ്സിൽ തന്നെ ID ചേർക്കുന്നു. ഉപയോക്താക്കൾ കുക്കികൾ ഡിസേബിൾ ചെയ്താൽ ഈ രീതി ഉപയോഗിക്കാം.
  • Hidden Form Fields: ID എന്നത് HTML ഫോമുകൾക്കുള്ളിൽ തന്നെ ഇരിക്കുന്നു.

സുരക്ഷയാണ് ഏറ്റവും വലിയ വെല്ലുവിളി. ഒരു അറ്റാക്കർ (attacker) സെഷൻ ഐഡി മോഷ്ടിച്ചാൽ, അവർക്ക് ഒരു ഉപയോക്താവിനെപ്പോലെ പ്രവർത്തിക്കാൻ സാധിക്കും.

സുരക്ഷിതമായിരിക്കാൻ ഈ നിയമങ്ങൾ പാലിക്കുക:

  • JavaScript വഴി വിവരങ്ങൾ ചോർത്തുന്നത് തടയാൻ HttpOnly കുക്കികൾ ഉപയോഗിക്കുക.
  • ഡാറ്റ HTTPS വഴി മാത്രം കൈമാറ്റം ചെയ്യപ്പെടുന്നു എന്ന് ഉറപ്പാക്കാൻ Secure കുക്കികൾ ഉപയോഗിക്കുക.
  • CSRF ആക്രമണങ്ങൾ തടയാൻ SameSite ക്രമീകരണങ്ങൾ ഉപയോഗിക്കുക.
  • ഒരു ഉപയോക്താവ് ലോഗ് ഔട്ട് ചെയ്യുമ്പോൾ എപ്പോഴും session.invalidate() വിളിക്കുക.
  • Fixation ആക്രമണങ്ങൾ തടയാൻ ലോഗിൻ ചെയ്ത ശേഷം പുതിയൊരു സെഷൻ നിർമ്മിക്കുക.

വലിയ കമ്പനികൾക്കായി സ്കെയിലിംഗ് (Scaling) ചെയ്യുമ്പോൾ: സാധാരണ സെഷനുകൾ ഒരു സെർവറിൽ മാത്രമേ പ്രവർത്തിക്കൂ. എന്നാൽ വലിയ ആപ്ലിക്കേഷനുകൾ ഒരു ലോഡ് ബാലൻസറിന് (load balancer) പിന്നിൽ നിരവധി സെർവറുകൾ ഉപയോഗിക്കുന്നു. നിങ്ങളുടെ സെഷൻ സെർവർ A-യിലാണെങ്കിൽ, സെർവർ B-ക്ക് നിങ്ങളെ തിരിച്ചറിയാൻ കഴിയില്ല.

ഇത് പരിഹരിക്കാൻ പ്രൊഫഷണലുകൾ ഇവ ഉപയോഗിക്കുന്നു:

  • Sticky Sessions: ലോഡ് ബാലൻസർ ഓരോ തവണയും നിങ്ങളെ ഒരേ സെർവറിലേക്ക് തന്നെ അയക്കുന്നു.
  • Distributed Caching: എല്ലാ സെർവറുകളും Redis പോലുള്ള ഒരു സെൻട്രൽ സ്റ്റോറുമായി ബന്ധിപ്പിക്കുന്നു. ഇതാണ് ഇൻഡസ്ട്രി സ്റ്റാൻഡേർഡ്.

ആധുനിക ആപ്ലിക്കേഷനുകൾ JWT-കളും (JSON Web Tokens) ഉപയോഗിക്കുന്നു. സെഷനുകളിൽ നിന്ന് വ്യത്യസ്തമായി, JWT-കൾ സ്റ്റേറ്റ്‌ലെസ്സ് ആണ്. ഡാറ്റ സെർവറിലല്ല, മറിച്ച് ടോക്കണിൽ തന്നെയാണ് ഇരിക്കുന്നത്. ഇത് മൈക്രോ സർവീസുകളുടെ (microservices) സ്കെയിലിംഗ് എളുപ്പമാക്കുന്നു.

സെഷനുകളിൽ വൈദഗ്ധ്യം നേടുന്നത് സുരക്ഷിതവും പ്രൊഫഷണലുമായ ജാവ ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കാൻ നിങ്ങളെ സഹായിക്കും.

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

Optional learning community: https://t.me/GyaanSetuAi