Java Web Applications ਵਿੱਚ Session Management

HTTP stateless ਹੈ। ਇਹ ਆਧੁਨਿਕ ਵੈੱਬ ਐਪਸ ਲਈ ਇੱਕ ਸਮੱਸਿਆ ਹੈ।

ਸਰਵਰ ਤੁਹਾਨੂੰ ਯਾਦ ਨਹੀਂ ਰੱਖਦਾ। ਹਰ ਰਿਕਵੈਸਟ ਇੱਕ ਨਵੀਂ ਰਿਕਵੈਸਟ ਹੁੰਦੀ ਹੈ। ਯੂਜ਼ਰਸ ਨੂੰ ਟ੍ਰੈਕ ਕਰਨ ਦੇ ਤਰੀਕੇ ਤੋਂ ਬਿਨਾਂ, ਸ਼ਾਪਿੰਗ ਕਾਰਟ ਗਾਇਬ ਹੋ ਜਾਂਦੇ ਹਨ ਅਤੇ ਯੂਜ਼ਰਸ ਨੂੰ ਹਰ ਇੱਕ ਕਲਿੱਕ 'ਤੇ ਦੁਬਾਰਾ ਲੌਗਇਨ ਕਰਨਾ ਪੈਂਦਾ ਹੈ।

Session management ਇਸ ਨੂੰ ਠੀਕ ਕਰਦਾ ਹੈ। ਇਹ ਰਿਕਵੈਸਟਸ ਦੇ ਵਿਚਕਾਰ ਇੱਕ ਲਿੰਕ ਬਣਾਉਂਦਾ ਹੈ ਤਾਂ ਜੋ ਸਰਵਰ ਨੂੰ ਪਤਾ ਲੱਗ ਸਕੇ ਕਿ ਤੁਸੀਂ ਕੌਣ ਹੋ।

ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ:

  • ਤੁਸੀਂ ਲੌਗਇਨ ਕਰਦੇ ਹੋ।
  • ਸਰਵਰ ਇੱਕ session ਬਣਾਉਂਦਾ ਹੈ।
  • ਸਰਵਰ ਇੱਕ ਯੂਨੀਕ Session ID ਬਣਾਉਂਦਾ ਹੈ।
  • ਸਰਵਰ ਇਹ ID ਤੁਹਾਡੇ ਬ੍ਰਾਊਜ਼ਰ ਨੂੰ ਭੇਜਦਾ ਹੈ।
  • ਤੁਹਾਡਾ ਬ੍ਰਾਊਜ਼ਰ ਹਰ ਨਵੀਂ ਰਿਕਵੈਸਟ ਦੇ ਨਾਲ ਉਹ ID ਵਾਪਸ ਭੇਜਦਾ ਹੈ।

Java ਡਿਵੈਲਪਰ ਇਸ ਨੂੰ ਮੈਨੇਜ ਕਰਨ ਲਈ HttpSession interface ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ। ਤੁਸੀਂ ID ਜਾਂ ਰੋਲਸ ਵਰਗਾ ਯੂਜ਼ਰ ਡੇਟਾ ਸਿੱਧਾ session ਵਿੱਚ ਸਟੋਰ ਕਰ ਸਕਦੇ ਹੋ।

ਸੈਸ਼ਨਾਂ ਨੂੰ ਟ੍ਰੈਕ ਕਰਨ ਦੇ ਆਮ ਤਰੀਕੇ:

  • Cookies: ਸਭ ਤੋਂ ਆਮ ਤਰੀਕਾ। ਬ੍ਰਾਊਜ਼ਰ ਆਪਣੇ ਆਪ ID ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ।
  • URL Rewriting: ਜੇਕਰ ਯੂਜ਼ਰ cookies ਨੂੰ ਡਿਸੇਬਲ ਕਰ ਦਿੰਦਾ ਹੈ ਤਾਂ ਇਹ ਉਪਯੋਗੀ ਹੈ।
  • Hidden Form Fields: ਮਲਟੀ-ਸਟੈਪ ਫਾਰਮਾਂ ਲਈ ਵਧੀਆ ਹੈ।

ਸੁਰੱਖਿਆ ਸਭ ਤੋਂ ਵੱਡੀ ਚਿੰਤਾ ਹੈ। ਹਮਲਾਵਰ ਯੂਜ਼ਰਸ ਦਾ ਰੂਪ ਧਾਰਨ ਕਰਨ ਲਈ Session IDs ਚੋਰੀ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਨ।

ਇਹਨਾਂ ਕਦਮਾਂ ਨਾਲ ਆਪਣੀ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰੋ:

  • ਸਾਰੇ ਟ੍ਰੈਫਿਕ ਲਈ HTTPS ਦੀ ਵਰਤੋਂ ਕਰੋ।
  • Cookies ਨੂੰ HttpOnly 'ਤੇ ਸੈੱਟ ਕਰੋ ਤਾਂ ਜੋ JavaScript ਉਹਨਾਂ ਨੂੰ ਚੋਰੀ ਨਾ ਕਰ ਸਕੇ।
  • Secure ਫਲੈਗ ਦੀ ਵਰਤੋਂ ਕਰੋ ਤਾਂ ਜੋ cookies ਸਿਰਫ਼ ਐਨਕ੍ਰਿਪਟਡ ਕਨੈਕਸ਼ਨਾਂ ਰਾਹੀਂ ਹੀ ਜਾ ਸਕਣ।
  • CSRF ਹਮਲਿਆਂ ਨੂੰ ਰੋਕਣ ਲਈ SameSite=Strict ਦੀ ਵਰਤੋਂ ਕਰੋ।
  • ਲੌਗਆਊਟ ਦੌਰਾਨ ਹਮੇਸ਼ਾ session.invalidate() ਕਾਲ ਕਰੋ।

ਵੱਡੀਆਂ ਐਂਟਰਪ੍ਰਾਈਜ਼ ਐਪਸ ਲਈ, ਇੱਕ ਸਰਵਰ ਕਾਫ਼ੀ ਨਹੀਂ ਹੈ। ਜੇਕਰ ਤੁਹਾਡੇ ਕੋਲ ਕਈ ਸਰਵਰ ਹਨ, ਤਾਂ Server B ਨੂੰ Server A 'ਤੇ ਬਣਾਏ ਗਏ session ਬਾਰੇ ਪਤਾ ਨਹੀਂ ਲੱਗੇਗਾ।

ਇਸ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ, distributed session management ਦੀ ਵਰਤੋਂ ਕਰੋ:

  • Sticky Sessions: Load balancer ਤੁਹਾਨੂੰ ਹਰ ਵਾਰ ਉਸੇ ਸਰਵਰ 'ਤੇ ਭੇਜਦਾ ਹੈ।
  • Database Storage: ਸਾਰੇ ਸਰਵਰ ਇੱਕ ਕੇਂਦਰੀ ਡੇਟਾਬੇਸ ਦੀ ਜਾਂਚ ਕਰਦੇ ਹਨ।
  • Redis: ਇਹ ਇੰਡਸਟਰੀ ਸਟੈਂਡਰਡ ਹੈ। ਇਹ ਤੇਜ਼ ਹੈ ਅਤੇ ਆਸਾਨੀ ਨਾਲ ਸਕੇਲ ਹੋ ਜਾਂਦਾ ਹੈ।

ਤੁਹਾਨੂੰ Sessions ਅਤੇ JWTs ਵਿਚਕਾਰ ਅੰਤਰ ਵੀ ਪਤਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। Sessions ਡੇਟਾ ਸਰਵਰ 'ਤੇ ਸਟੋਰ ਕਰਦੇ ਹਨ। JWTs ਡੇਟਾ ਕਲਾਇੰਟ 'ਤੇ ਸਟੋਰ ਕਰਦੇ ਹਨ। Sessions ਨੂੰ ਕੰਟਰੋਲ ਕਰਨਾ ਆਸਾਨ ਹੈ, ਜਦੋਂ ਕਿ JWTs ਮਾਈਕਰੋਸਰਵਿਸਿਜ਼ ਲਈ ਬਿਹਤਰ ਹਨ।

ਇਹਨਾਂ ਸੰਕਲਪਾਂ ਵਿੱਚ ਮਾਹਰ ਹੋਣਾ ਤੁਹਾਨੂੰ ਸੁਰੱਖਿਅਤ ਅਤੇ ਸਕੇਲੇਬਲ ਸਾਫਟਵੇਅਰ ਬਣਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ।

ਸਰੋਤ: https://dev.to/naveenkumar1/session-management-in-java-web-applications-38od