Java Web Applications ನಲ್ಲಿ Session Management

HTTP ಎಂಬುದು stateless ಆಗಿದೆ. ಇದರರ್ಥ ಬ್ರೌಸರ್‌ನಿಂದ ಬರುವ ಪ್ರತಿಯೊಂದು ವಿನಂತಿಯು (request) ಒಂದು ಹೊಸ ಸಂವಹನವಾಗಿದೆ. ನೀವು ಯಾರು ಅಥವಾ ಒಂದು ಕ್ಷಣದ ಹಿಂದೆ ನೀವು ಏನು ಮಾಡಿದ್ದೀರಿ ಎಂಬುದನ್ನು ಸರ್ವರ್ ನೆನಪಿಟ್ಟುಕೊಳ್ಳುವುದಿಲ್ಲ.

Session management ಇಲ್ಲದಿದ್ದರೆ, ವೆಬ್‌ಸೈಟ್‌ಗಳು ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.

  • ನೀವು ಪ್ರತಿಯೊಂದು ಪೇಜ್ ಕ್ಲಿಕ್ ಮಾಡುವಾಗಲೂ ಮತ್ತೆ ಲಾಗಿನ್ ಆಗಬೇಕಾಗುತ್ತದೆ.
  • ಪ್ರತಿ ಹಂತದ ನಂತರ ಶಾಪಿಂಗ್ ಕಾರ್ಟ್‌ಗಳು ಖಾಲಿಯಾಗುತ್ತವೆ.
  • ವೈಯಕ್ತಿಕ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ತಕ್ಷಣವೇ ಮಾಯವಾಗುತ್ತವೆ.

Session management ನಿರಂತರತೆಯನ್ನು (continuity) ಸೃಷ್ಟಿಸುತ್ತದೆ. ಇದು ಒಂದೇ ಬಳಕೆದಾರರಿಗೆ ಸಂಬಂಧಿಸಿದ ಅನೇಕ ವಿನಂತಿಗಳನ್ನು (requests) ಲಿಂಕ್ ಮಾಡಲು ಸರ್ವರ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ.

ಇದು ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ:

  1. ಬಳಕೆದಾರ ಲಾಗಿನ್ ಆಗುತ್ತಾರೆ.
  2. ಸರ್ವರ್ ಒಂದು session ಅನ್ನು ರಚಿಸುತ್ತದೆ.
  3. ಸರ್ವರ್ ಒಂದು ವಿಶಿಷ್ಟವಾದ Session ID ಅನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ.
  4. ಸರ್ವರ್ ಈ ID ಅನ್ನು ಬ್ರೌಸರ್ ಕಡೆಗೆ ಕಳುಹಿಸುತ್ತದೆ.
  5. ಬ್ರೌಸರ್ ಪ್ರತಿ ಹೊಸ ವಿನಂತಿಯೊಂದಿಗೆ (request) ಆ ID ಅನ್ನು ಮರಳಿ ಕಳುಹಿಸುತ್ತದೆ.

ಇದನ್ನು ನಿರ್ವಹಿಸಲು Java HttpSession interface ಅನ್ನು ಬಳಸುತ್ತದೆ. ನೀವು ಬಳಕೆದಾರರ ID ಅಥವಾ ರೋಲ್‌ಗಳಂತಹ ಡೇಟಾವನ್ನು ನೇರವಾಗಿ session ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಬಹುದು.

ಸಾಮಾನ್ಯ ಟ್ರ್ಯಾಕಿಂಗ್ ವಿಧಾನಗಳು:

  • Cookies: ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ವಿಧಾನ. ಸರ್ವರ್ ಒಂದು JSESSIONID cookie ಅನ್ನು ಕಳುಹಿಸುತ್ತದೆ. ಉಳಿದದ್ದನ್ನು ಬ್ರೌಸರ್ ನಿರ್ವಹಿಸುತ್ತದೆ.
  • URL Rewriting: ID ಅನ್ನು ವೆಬ್ ವಿಳಾಸಕ್ಕೆ (web address) ಸೇರಿಸಲಾಗುತ್ತದೆ. ಬಳಕೆದಾರರು cookies ಅನ್ನು ಡಿಸೇಬಲ್ ಮಾಡಿದಾಗ ಇದು ಕೆಲಸ ಮಾಡುತ್ತದೆ.
  • Hidden Form Fields: ID ಎಂಬುದು HTML forms ಒಳಗೇ ಇರುತ್ತದೆ.

ಭದ್ರತೆಯೇ (Security) ಇಲ್ಲಿ ದೊಡ್ಡ ಸವಾಲು. ದಾಳಿಗಾರರು (attacker) Session ID ಅನ್ನು ಕದಿಯುವಲ್ಲಿ ಯಶಸ್ವಿಯಾದರೆ, ಅವರು ಬಳಕೆದಾರರಂತೆ ನಟಿಸಬಹುದು (impersonate).

ಸುರಕ್ಷಿತವಾಗಿರಲು ಈ ನಿಯಮಗಳನ್ನು ಪಾಲಿಸಿ:

  • JavaScript ಕಳ್ಳತನವನ್ನು ತಡೆಯಲು HttpOnly cookies ಬಳಸಿ.
  • ಡೇಟಾ ಕೇವಲ HTTPS ಮೂಲಕವೇ ಸಂಚರಿಸುವಂತೆ ಮಾಡಲು Secure cookies ಬಳಸಿ.
  • CSRF ದಾಳಿಗಳನ್ನು ತಡೆಯಲು SameSite settings ಬಳಸಿ.
  • ಬಳಕೆದಾರ ಲಾಗ್ ಔಟ್ ಆದಾಗ ಯಾವಾಗಲೂ session.invalidate() ಅನ್ನು ಕರೆಯಿರಿ.
  • Fixation attacks ತಡೆಯಲು ಲಾಗಿನ್ ಆದ ನಂತರ ಹೊಸ session ಅನ್ನು ರಚಿಸಿ.

ದೊಡ್ಡ ಕಂಪನಿಗಳಿಗಾಗಿ ಸ್ಕೇಲಿಂಗ್ (Scaling): Standard sessions ಒಂದು ಸರ್ವರ್‌ನಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತವೆ. ಆದರೆ ದೊಡ್ಡ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು load balancer ಹಿಂದೆ ಅನೇಕ ಸರ್ವರ್‌ಗಳನ್ನು ಬಳಸುತ್ತವೆ. ಒಂದು ವೇಳೆ Server A ನಿಮ್ಮ session ಅನ್ನು ಹೊಂದಿದ್ದರೆ, Server B ಗೆ ನೀವು ಯಾರು ಎಂಬುದು ತಿಳಿಯುವುದಿಲ್ಲ.

ಇದನ್ನು ಸರಿಪಡಿಸಲು, ವೃತ್ತಿಪರರು ಇವುಗಳನ್ನು ಬಳಸುತ್ತಾರೆ:

  • Sticky Sessions: Load balancer ಪ್ರತಿ ಬಾರಿಯೂ ನಿಮ್ಮನ್ನು ಅದೇ ಸರ್ವರ್‌ಗೆ ಕಳುಹಿಸುತ್ತದೆ.
  • Distributed Caching: ಎಲ್ಲಾ ಸರ್ವರ್‌ಗಳು Redis ನಂತಹ ಕೇಂದ್ರ ಸಂಗ್ರಹಣೆಗೆ (central store) ಸಂಪರ್ಕ ಹೊಂದುತ್ತವೆ. ಇದು ಉದ್ಯಮದ ಮಾನದಂಡವಾಗಿದೆ (industry standard).

ಆಧುನಿಕ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು JWTs (JSON Web Tokens) ಅನ್ನು ಸಹ ಬಳಸುತ್ತವೆ. Sessions ತರಹ ಅಲ್ಲದೆ, JWTs stateless ಆಗಿರುತ್ತವೆ. ಡೇಟಾ ಸರ್ವರ್‌ನಲ್ಲಿಲ್ಲದೆ, ಟೋಕನ್‌ನಲ್ಲೇ ಇರುತ್ತದೆ. ಇದು microservices ಸ್ಕೇಲಿಂಗ್ ಮಾಡುವುದನ್ನು ಸುಲಭಗೊಳಿಸುತ್ತದೆ.

Session ಗಳಲ್ಲಿ ಪರಿಣತಿ ಪಡೆಯುವುದು ಸುರಕ್ಷಿತ ಮತ್ತು ವೃತ್ತಿಪರ Java ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ನಿರ್ಮಿಸಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ.

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

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