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

HTTP haina hali (stateless). Hili ni tatizo kwa programu za kisasa za wavuti.

Seva haikukumbuki. Kila ombi ni ombi jipya. Bila njia ya kufuatilia watumiaji, vikapu vya manunuzi hutoweka na watumiaji hulazimika kuingia (log in) tena kwa kila mbofyo.

Usimamizi wa session unatatua hili. Unatengeneza uhusiano kati ya maombi ili seva ijue wewe ni nani.

Jinsi inavyofanya kazi:

  • Unaingia (log in).
  • Seva inatengeneza session.
  • Seva inatengeneza Session ID ya kipekee.
  • Seva inatuma ID hii kwenye kivinjari (browser) chako.
  • Kivinjari chako kinatuma ID hiyo kurudi pamoja na kila ombi jipya.

Watengenezaji wa Java hutumia interface ya HttpSession kusimamia hili. Unaweza kuhifadhi data za mtumiaji kama vile ID au majukumu (roles) moja kwa moja kwenye session.

Njia za kawaida za kufuatilia session:

  • Cookies: Njia inayotumika zaidi. Kivinjari hudhibiti ID kiotomatiki.
  • URL Rewriting: Inafaa ikiwa mtumiaji amezima cookies.
  • Hidden Form Fields: Nzuri kwa fomu za hatua nyingi.

Usalama ndio wasiwasi mkubwa zaidi. Washambuliaji hujaribu kuiba Session ID ili kujifanya ni watumiaji.

Linda programu yako kwa hatua hizi:

  • Tumia HTTPS kwa trafiki zote.
  • Weka cookies kuwa HttpOnly ili JavaScript isiweze kuziba.
  • Tumia bendera ya Secure ili cookies zisafiri kupitia miunganisho iliyosimbwa (encrypted) pekee.
  • Tumia SameSite=Strict kuzuia mashambulizi ya CSRF.
  • Daima ite session.invalidate() wakati wa kutoka (logout).

Kwa programu kubwa za kampuni, seva moja haitoshi. Ikiwa una seva nyingi, Seva B haitakuwa na habari kuhusu session iliyotengenezwa kwenye Seva A.

Ili kutatua hili, tumia usimamizi wa session uliosanifiwa (distributed session management):

  • Sticky Sessions: Load balancer inakutuma kwenye seva ile ile kila wakati.
  • Database Storage: Seva zote hukagua hifadhidata moja kuu.
  • Redis: Hii ndiyo kiwango cha tasnia. Ni ya haraka na inaweza kupanuliwa kwa urahisi.

Unapaswa pia kujua tofauti kati ya Sessions na JWTs. Sessions huhifadhi data kwenye seva. JWTs huhifadhi data kwa mteja (client). Sessions ni rahisi kudhibiti, wakati JWTs ni bora zaidi kwa microservices.

Kuelewa dhana hizi kunakusaidia kujenga programu salama na zinazoweza kupanuliwa.

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