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

HTTP ಎಂಬುದು stateless ಆಗಿದೆ. ಇದು ಆಧುನಿಕ web appsಗಳಿಗೆ ಒಂದು ಸಮಸ್ಯೆಯಾಗಿದೆ.

ಸರ್ವರ್ ನಿಮ್ಮನ್ನು ನೆನಪಿಟ್ಟುಕೊಳ್ಳುವುದಿಲ್ಲ. ಪ್ರತಿಯೊಂದು request ಕೂಡ ಒಂದು ಹೊಸ request ಆಗಿರುತ್ತದೆ. ಬಳಕೆದಾರರನ್ನು (users) ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ದಾರಿಯಿಲ್ಲದಿದ್ದರೆ, shopping carts ಮಾಯವಾಗುತ್ತವೆ ಮತ್ತು ಬಳಕೆದಾರರು ಪ್ರತಿ ಕ್ಲಿಕ್ ಮಾಡುವಾಗಲೂ ಮತ್ತೆ log in ಮಾಡಬೇಕಾಗುತ್ತದೆ.

Session management ಇದನ್ನು ಸರಿಪಡಿಸುತ್ತದೆ. ಇದು requests ನಡುವೆ ಒಂದು ಲಿಂಕ್ ಅನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ, ಇದರಿಂದ ಸರ್ವರ್ ನೀವು ಯಾರೆಂದು ತಿಳಿಯುತ್ತದೆ.

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

  • ನೀವು log in ಆಗುತ್ತೀರಿ.
  • ಸರ್ವರ್ ಒಂದು session ಅನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ.
  • ಸರ್ವರ್ ಒಂದು ವಿಶಿಷ್ಟವಾದ (unique) Session ID ಅನ್ನು ಜನರೇಟ್ ಮಾಡುತ್ತದೆ.
  • ಸರ್ವರ್ ಈ ID ಅನ್ನು ನಿಮ್ಮ browser ಗೆ ಕಳುಹಿಸುತ್ತದೆ.
  • ನಿಮ್ಮ browser ಪ್ರತಿ ಹೊಸ request ನೊಂದಿಗೆ ಆ ID ಅನ್ನು ಮರಳಿ ಕಳುಹಿಸುತ್ತದೆ.

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

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

  • Cookies: ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ವಿಧಾನ. Browser ಈ ID ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ.
  • URL Rewriting: ಬಳಕೆದಾರರು cookies ಅನ್ನು ಡಿಸೇಬಲ್ ಮಾಡಿದರೆ ಇದು ಉಪಯುಕ್ತವಾಗಿದೆ.
  • Hidden Form Fields: ಬಹು-ಹಂತದ (multi-step) forms ಗಾಗಿ ಇದು ಉತ್ತಮವಾಗಿದೆ.

ಭದ್ರತೆಯೇ (Security) ಅತಿದೊಡ್ಡ ಕಾಳಜಿಯಾಗಿದೆ. ದಾಳಿಕೋರರು (Attackers) ಬಳಕೆದಾರರಂತೆ ನಟಿಸಲು Session IDs ಅನ್ನು ಕದಿಯಲು ಪ್ರಯತ್ನಿಸುತ್ತಾರೆ.

ಈ ಹಂತಗಳ ಮೂಲಕ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ರಕ್ಷಿಸಿ:

  • ಎಲ್ಲಾ traffic ಗಾಗಿ HTTPS ಬಳಸಿ.
  • Cookies ಅನ್ನು HttpOnly ಎಂದು ಸೆಟ್ ಮಾಡಿ, ಇದರಿಂದ JavaScript ಅವುಗಳನ್ನು ಕದಿಯಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.
  • Secure flag ಬಳಸಿ, ಇದರಿಂದ cookies ಕೇವಲ encrypted connections ಮೂಲಕವೇ ಸಂಚರಿಸುತ್ತವೆ.
  • CSRF attacks ತಡೆಯಲು SameSite=Strict ಬಳಸಿ.
  • Logout ಮಾಡುವಾಗ ಯಾವಾಗಲೂ session.invalidate() ಅನ್ನು ಕರೆಯಿರಿ.

ದೊಡ್ಡ enterprise apps ಗಾಗಿ, ಒಂದು ಸರ್ವರ್ ಸಾಕಾಗುವುದಿಲ್ಲ. ನಿಮ್ಮ ಬಳಿ ಹಲವು ಸರ್ವರ್‌ಗಳಿದ್ದರೆ, Server A ನಲ್ಲಿ ಸೃಷ್ಟಿಸಲಾದ session ಬಗ್ಗೆ Server B ಗೆ ತಿಳಿದಿರುವುದಿಲ್ಲ.

ಇದನ್ನು ಪರಿಹರಿಸಲು, distributed session management ಬಳಸಿ:

  • Sticky Sessions: Load balancer ಪ್ರತಿ ಬಾರಿಯೂ ನಿಮ್ಮನ್ನು ಅದೇ ಸರ್ವರ್‌ಗೆ ಕಳುಹಿಸುತ್ತದೆ.
  • Database Storage: ಎಲ್ಲಾ ಸರ್ವರ್‌ಗಳು ಒಂದು ಕೇಂದ್ರ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಪರಿಶೀಲಿಸುತ್ತವೆ.
  • Redis: ಇದು industry standard ಆಗಿದೆ. ಇದು ವೇಗವಾಗಿದೆ ಮತ್ತು ಸುಲಭವಾಗಿ scale ಮಾಡಬಹುದು.

ನೀವು Sessions ಮತ್ತು JWTs ನಡುವಿನ ವ್ಯತ್ಯಾಸವನ್ನು ಸಹ ತಿಳಿದುಕೊಳ್ಳಬೇಕು. Sessions ಡೇಟಾವನ್ನು ಸರ್ವರ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸುತ್ತದೆ. JWTs ಡೇಟಾವನ್ನು client ನಲ್ಲಿ ಸಂಗ್ರಹಿಸುತ್ತದೆ. Sessions ಅನ್ನು ನಿಯಂತ್ರಿಸುವುದು ಸುಲಭ, ಆದರೆ microservices ಗಾಗಿ JWTs ಉತ್ತಮವಾಗಿವೆ.

ಈ ಪರಿಕಲ್ಪನೆಗಳಲ್ಲಿ ಪರಿಣತಿ ಪಡೆಯುವುದು ಸುರಕ್ಷಿತ ಮತ್ತು scale ಮಾಡಬಹುದಾದ ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು ನಿರ್ಮಿಸಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ.

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