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

HTTP എന്നത് സ്റ്റേറ്റ്‌ലെസ്സ് (stateless) ആണ്. ആധുനിക വെബ് ആപ്ലിക്കേഷനുകൾക്ക് ഇതൊരു പ്രശ്നമാണ്.

സെർവറിന് നിങ്ങളെ ഓർമ്മിക്കാൻ കഴിയില്ല. ഓരോ റിക്വസ്റ്റും ഒരു പുതിയ റിക്വസ്റ്റ് ആണ്. ഉപയോക്താക്കളെ ട്രാക്ക് ചെയ്യാൻ ഒരു മാർഗ്ഗമില്ലെങ്കിൽ, ഷോപ്പിംഗ് കാർട്ടുകൾ അപ്രത്യക്ഷമാവുകയും ഓരോ തവണ ക്ലിക്ക് ചെയ്യുമ്പോഴും ഉപയോക്താക്കൾ വീണ്ടും ലോഗിൻ ചെയ്യേണ്ടി വരികയും ചെയ്യും.

സെഷൻ മാനേജ്‌മെന്റ് (Session management) ഇത് പരിഹരിക്കുന്നു. റിക്വസ്റ്റുകൾക്കിടയിൽ ഒരു ബന്ധം സൃഷ്ടിക്കുന്നതിലൂടെ സെർവറിന് നിങ്ങൾ ആരാണെന്ന് മനസ്സിലാക്കാൻ സാധിക്കുന്നു.

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

  • നിങ്ങൾ ലോഗിൻ ചെയ്യുന്നു.
  • സെർവർ ഒരു സെഷൻ നിർമ്മിക്കുന്നു.
  • സെർവർ ഒരു യുണീക് (unique) Session ID ജനറേറ്റ് ചെയ്യുന്നു.
  • സെർവർ ഈ ID നിങ്ങളുടെ ബ്രൗസറിലേക്ക് അയക്കുന്നു.
  • ഓരോ പുതിയ റിക്വസ്റ്റോടൊപ്പവും നിങ്ങളുടെ ബ്രൗസർ ഈ ID തിരികെ അയക്കുന്നു.

ജാവ ഡെവലപ്പർമാർ ഇത് നിയന്ത്രിക്കാൻ HttpSession ഇന്റർഫേസ് ഉപയോഗിക്കുന്നു. ഐഡികൾ അല്ലെങ്കിൽ റോളുകൾ പോലുള്ള ഉപയോക്താവിൻ്റെ വിവരങ്ങൾ നിങ്ങൾക്ക് നേരിട്ട് സെഷനിൽ സംഭരിക്കാം.

സെഷനുകൾ ട്രാക്ക് ചെയ്യാനുള്ള സാധാരണ വഴികൾ:

  • Cookies: ഏറ്റവും സാധാരണമായ രീതി. ബ്രൗസർ ഈ ID സ്വയം കൈകാര്യം ചെയ്യുന്നു.
  • URL Rewriting: ഉപയോക്താവ് കുക്കികൾ ഡിസേബിൾ ചെയ്താൽ ഇത് ഉപയോഗപ്രദമാണ്.
  • Hidden Form Fields: മൾട്ടി-സ്റ്റെപ്പ് ഫോമുകൾക്ക് ഇത് നല്ലതാണ്.

സുരക്ഷയാണ് ഏറ്റവും വലിയ ആശങ്ക. ഉപയോക്താക്കളുടെ ഐഡന്റിറ്റി മോഷ്ടിച്ച് മറ്റൊരാളായി പ്രവർത്തിക്കാൻ അറ്റാക്കർമാർ സെഷൻ ഐഡികൾ മോഷ്ടിക്കാൻ ശ്രമിക്കുന്നു.

ഈ ഘട്ടങ്ങളിലൂടെ നിങ്ങളുടെ ആപ്ലിക്കേഷൻ സംരക്ഷിക്കുക:

  • എല്ലാ ട്രാഫിക്കിനും HTTPS ഉപയോഗിക്കുക.
  • കുക്കികൾ HttpOnly ആയി സെറ്റ് ചെയ്യുക, അങ്ങനെ ജാവാസ്ക്രിപ്റ്റിന് അവ മോഷ്ടിക്കാൻ കഴിയില്ല.
  • Secure ഫ്ലാഗ് ഉപയോഗിക്കുക, അങ്ങനെ കുക്കികൾ എൻക്രിപ്റ്റ് ചെയ്ത കണക്ഷനിലൂടെ മാത്രം സഞ്ചരിക്കുന്നു എന്ന് ഉറപ്പാക്കാം.
  • CSRF ആക്രമണങ്ങൾ തടയാൻ SameSite=Strict ഉപയോഗിക്കുക.
  • ലോഗൗട്ട് ചെയ്യുമ്പോൾ എപ്പോഴും session.invalidate() വിളിക്കുക.

വലിയ എൻ്റർപ്രൈസ് ആപ്ലിക്കേഷനുകൾക്ക് ഒരു സെർവർ മാത്രം മതിയാകില്ല. നിങ്ങൾക്ക് ഒന്നിലധികം സെർവറുകൾ ഉണ്ടെങ്കിൽ, സെർവർ A-യിൽ നിർമ്മിച്ച സെഷനെക്കുറിച്ച് സെർവർ B-ക്ക് അറിയില്ലായിരിക്കും.

ഇത് പരിഹരിക്കാൻ, ഡിസ്ട്രിബ്യൂട്ടഡ് സെഷൻ മാനേജ്‌മെന്റ് (distributed session management) ഉപയോഗിക്കുക:

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

സെഷനുകളും (Sessions) JWT-കളും തമ്മിലുള്ള വ്യത്യാസം നിങ്ങൾ അറിഞ്ഞിരിക്കണം. സെഷനുകൾ ഡാറ്റ സെർവറിൽ സംഭരിക്കുന്നു. JWT-കൾ ഡാറ്റ ക്ലയൻ്റിൽ സംഭരിക്കുന്നു. സെഷനുകൾ നിയന്ത്രിക്കാൻ എളുപ്പമാണ്, എന്നാൽ മൈക്രോസെർവീസുകൾക്ക് (microservices) JWT-കൾ ആണ് കൂടുതൽ അനുയോജ്യം.

ഈ ആശയങ്ങളിൽ വൈദഗ്ധ്യം നേടുന്നത് സുരക്ഷിതവും സ്കെയിലബിളും ആയ സോഫ്റ്റ്‌വെയറുകൾ നിർമ്മിക്കാൻ നിങ്ങളെ സഹായിക്കും.

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