နားလည်ထားရမယ့် အချက်
HTTP သည် stateless ဖြစ်သည် - request တစ်ခုစီသည် ယခင် request ကို built-in memory မရှိပါ။ ဤ gap ကို ဖြေရှင်းရန် cookie နှင့် session ပေါ်လာသည်။
cookie သည် server က browser ကို သိမ်းစေသော data အသေးစား ဖြစ်ပြီး session ID၊ preference၊ analytics (သို့) security check အတွက် သုံးနိုင်သည် - cookie အားလုံး tracking cookie မဟုတ်ပါ။
- Secure - HTTPS မှသာ ပို့သည်
- HttpOnly - JavaScript က ဖတ်၍မရ
- SameSite - cross-site ပို့ခြင်းကို ကန့်သတ်သည်
- Expires - browser က မည်မျှကြာအောင် ထားမည်
session သည် server-side state ဖြစ်ပြီး browser သည် ID တစ်ခုသာ ပါဝင်သော session cookie ကို ကိုင်ဆောင်သည်။ server သည် ID ဖြင့် session store တွင် ရှာဖွေသည်။
| Aspect | Cookie vs Session |
|---|---|
| Where the data lives | Cookie: browser တွင် သိမ်း။ Session: server ပေါ်တွင် သိမ်းပြီး ID ဖြင့် ရည်ညွှန်းသည်။ |
| What the browser holds | Cookie: data အစစ် (သို့) ID။ Session: ID တစ်ခုသာ; state အစစ်သည် server ပေါ်တွင်ရှိသည်။ |
| Typical size limit | Cookie: cookie တစ်ခုလျှင် KB အနည်းငယ်။ Session: server-side store ခွင့်ပြုသလောက်။ |
| Revocation | Cookie: browser (သို့) expiry ဖြင့် ရှင်း။ Session: server က ချက်ချင်း invalidate လုပ်နိုင်သည်။ |
- Cookie
- site တူညီအား နောင် request များတွင် ပြန်ပို့ရန် browser ကို သိမ်းဆည်းစေသော server မှ တောင်းဆိုသည့် data အသေးစား
- Session
- session cookie တွင် သိမ်းထားသော ID တစ်ခုဖြင့် ရည်ညွှန်းလေ့ရှိသည့် user တစ်ဦးချင်းစီနှင့် ဆက်စပ်သော server-side state
SESSION MODEL
-------------
SESSION MODEL
--------------
Browser Server Session Store
-------- ------ -------------
Cookie: sid=abc123 -> receives sid -> looks up "abc123"
-> finds: Alice, cart: 3
The cookie itself holds only an ID.
The real user state lives in the session store on the server.လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
site တစ်ခု၏ developer tools ရှိ cookie များကို ကြည့်ပါ - session cookie တစ်ခုကို တွေ့ရလေ့ရှိသည်။ browser သည် ၎င်းကို request တိုင်း အလိုအလျောက် ပို့ပေးသည်။
အောက်ပါ code သည် memory session store အသေးစားကို simulate လုပ်သည်: cookie ID ရှိပြီးသားလား စစ်ပြီး existing (သို့) new session ဟု ဆုံးဖြတ်သည်။
အတူတူ စမ်းရေးကြည့်မယ်
function createSessionSimulator() {
const store = new Map();
let nextId = 1;
return function handleRequest(cookieId) {
if (cookieId && store.has(cookieId)) {
return { status: "existing session", sessionId: cookieId };
}
const newId = "sess_" + nextId++;
store.set(newId, { createdAt: nextId });
return { status: "new session", sessionId: newId };
};
}
const handleRequest = createSessionSimulator();
const incoming = [undefined, undefined, "sess_1", undefined, "sess_1", "sess_2"];
incoming.forEach((cookieId, i) => {
console.log(`Request ${i + 1} (cookie: ${cookieId ?? "none"}) ->`, handleRequest(cookieId));
});ရလဒ်ခြောက်ခုကို အစီအစဉ်အတိုင်း log ထုတ်သည်: session အသစ်နှစ်ခု (sess_1, sess_2)၊ sess_1 ကို existing အဖြစ် ထပ်တွေ့ခြင်း၊ session အသစ်တတိယ (sess_3)၊ ပြီးနောက် sess_1 နှင့် sess_2 ကို existing အဖြစ် ထပ်တွေ့ခြင်း။၅ မိနစ် စမ်းကြည့်
code ရှိ incoming request list ကို ပြင်ဆင်ပြီး ဘယ်တော့မှ မထုတ်ပေးဖူးသော cookie ID တစ်ခုပါသော request တစ်ခု ထည့်ကာ run မလုပ်မီ new (သို့) existing ဖြစ်မည်ကို ခန့်မှန်းကြည့်ပါ။
သတိလေးတစ်ချက်
cookie တိုင်းကို tracking cookie ဟု ယူဆခြင်း - အများစုသည် login ထားဆဲဖြစ်ခြင်းကဲ့သို့ အခြေခံ function အတွက် မရှိမဖြစ် ဖြစ်သည်။
session cookie သည် များသောအားဖြင့် reference တစ်ခုသာဖြစ်ကြောင်း မေ့လျော့ခြင်း - ၎င်းကို ပျောက်ဆုံး (သို့) ဖျက်လိုက်လျှင် data အစစ်ကို မဖျက်ဘဲ session ကို ရပ်တန့်စေနိုင်သည်။
MDN Web Docs - Using HTTP cookies — How the Web Works