
အပေါ်ကလိုမျိူး မေးခွန်းလေးတွေကို ကျွန်ုပ်တို့ အားလုံးမြင်ဖူးကြမှာပါ။ ခုဒီစာကို ဖတ်နေတဲ့ website မှာတောင် ရှိချင်ရှိနေမှာပါ။ Cookie တွေဟာ ကျွန်တော်တို့အားလုံးရဲ့ internet အသုံးပြုမှုကို များစွာသက်ရောက်နေပါတယ်။
ဒီနေ့ခေတ်မှာ Cookie မသုံးတဲ့ website ကြီးကြီးမားမားဆိုတာ မရှိသလောက်ပါပဲ။ Facebook, Twitter တို့လို social media service ကြီးတွေကအစ Amazon လို e-commerce site တွေနဲ့ personal blog လေးတွေအထိ Cookie တွေကို အသုံးပြုကြပါတယ်။ ဒီလို Cookie တွေကို သုံးခြင်းအားဖြင့် အကျိုးကျေးဇူးတွေ၊ တနည်းအားဖြင့် ထူးခြားတဲ့ လုပ်ဆောင်ချက်တွေကို ရရှိနိုင်စေပါတယ်။
ဘယ်လို လုပ်ဆောင်ချက်တွေကို ဆောင်ရွက်နိုင်စေမလဲဆိုတာကိုသိဖို့အတွက် Cookie တွေရဲ့ အခြေခံအလုပ်လုပ်ပုံကို သိဖို့လိုလာပါတယ်။

Cookie ဆိုတဲ့ အင်တာနက် နည်းပညာကို 1994 ခုနှစ်မှာ Netscape မှာအလုပ်လုပ် နေတဲ့ software engineer တစ်ဦးဖြစ်တဲ့ Lou Montulli ကစတင် တီထွင်ခဲ့တာပါ။ Netscape ဆိုတာ ထိုစဥ်က microsoft နဲ့အပြိုင် နာမည်ကြီးခဲ့တဲ့၊ web နည်းပညာပေါင်းများစွာကို သက်ရောက်စေခဲ့တဲ့ company ကြီးတစ်ခုပါ။
90s ခုနှစ်များတုန်းက website တွေမှာ ကြီးမားတဲ့ ပြသနာတစ်ခုက user တစ်ယောက်ချင်းစီရဲ့ အချက်အလက်ကို web server ကထိန်းသိမ်းမပေးထားနိုင်တာပါ။
စာဖတ်သူတွေ မြင်သာအောင်ပြောရရင် ကျွန်တော်တို့ ယနေ့ခေတ်မှာဆို social media site တစ်ခုကို login ၀င်တယ်ပဲဆိုပါဆို့။ ကျွန်တော်တို့ အချက်အလက်တွေကို မှန်အောင်ရိုက်ထည့်ပြီး login တစ်ခါ၀င်ပြီးတာနဲ့ အဲ့ website ထဲမှာ ကြိုက်တဲ့ page ကိုခေါ်ကြည့်လို့ရပါပြီ။
ဆိုလိုတာက ကျွန်တော်တို့ message တွေပို့တဲ့ page ကိုပဲသွားမလား… ဓာတ်ပုံတွေရှိတဲ့ page ကိုပဲသွားမလား… ကျွန်တော်တို့ logout မလုပ်မချင်း page တွေခေါ်ကြည့်လို့ ရပါတယ်။ page တစ်ခုကိုနှိပ်ပြီး၀င်တယ်ဆိုတာ အရှင်းဆုံးပြောရရင် browser ကနေ server ကို [ဒီ page ကိုပေးပါဦး] ဆိုပြီး ‘request’ လှမ်းလုပ်တာပါ။
ဒီနေရာမှာတစ်ခု ပြောစရာရှိတာက အင်တာနက်ဟာ HTTP ခေါ် Hypertext Transfer Protocol ဆိုတဲ့ နည်းပညာပေါ်မှာ အခြေခံထားပါတယ်။ HTTP ရဲ့ သဘောသဘာ၀က ‘stateless’ ဖြစ်ပါတယ်။ ‘stateless’ ဆိုတာက browser ကနေ server ဆီကို request တစ်ခုလုပ်တိုင်းမှာ ယခင်က request တွေနဲ့ သက်ဆိုင်ခြင်းမရှိတာပါ။
Browser က request တစ်ခုလုပ်တယ်၊ server က response ပြန်ပေးတယ်၊ အဲ့ response က page တစ်ခုဖြစ်ချင်ဖြစ်မယ်၊ browser ဆီပြန်ရောက်တယ်၊ ပြီးရင် HTTP ဆက်သွယ်မှုပြီးပါပြီ။ server ရဲ့ memory ပေါ်မှာ client ဖြစ်တဲ့၊ တောင်းဆိုသူဖြစ်တဲ့ browser ရဲ့ အခြေအနေ ‘state’ ကို သိမ်းဆည်းထားတာမျိုး မရှိပါဘူး။ အဲ့အတွက်ကြောင့် client ဖြစ်တဲ့ browser က ဆက်သွယ်မှူတိုင်းမှာ လိုအပ်တဲ့ အချက်အလက်မှန်သမျှကို တစ်ပါတည်းပေးပို့ရပါတယ်။

ခုနက social media ဥပမာနဲ့ပြန်ပြောရရင် အဲ့တာဆို ကျွန်တော်တို့က login တစ်ခါ၀င်ပြီးရုံနဲ့မရတော့ပါဘူး။ ကျွန်တော်တို့ လိုချင်တဲ့ page တစ်ခုကို တောင်းတိုင်းတောင်းတိုင်း [request လုပ်တိုင်း] ကျွန်တော်တို့ login ပြန်ဝင်ပြီး ကျွန်တော်တို့ရဲ့ အချက်အလက်တွေကို ပြန်ပြန်ပို့နေရတော့မှာပါ။ ဘာလို့လဲဆိုတော့ server ဘက်ကနေ စဥ်းစားကြည့်ရင် ကျွန်တော်တို့ user တွေရဲ့ ‘state’ ကိုထိန်းသိမ်းမထားတဲ့ အတွက် နောက်တက်လာတဲ့ request တစ်ခုဟာ server နဲ့ အရင်က ချိတ်ဆက်ဖူးထားတဲ့ user လား၊ ဒါမှမဟုတ် login မ၀င်ရသေးတဲ့ အပြင်ကလူလားဆိုတာ ခွဲလို့မရနိုင်ပါဘူး။
ခွဲလို့ရနိုင်ဖို့ အတွက်ဆို ကျွန်တော်တို့က server ကို page အသစ်တွေတောင်းပြီး request လုပ်တိုင်းလုပ်တိုင်းမှာ ‘ကျွန်တော်က ခုလေးတင် login ၀င်ပြီး ချိတ်ထားတဲ့သူဖြစ်ပါတယ်’ ဆိုတာကို ပြနိုင်မယ့် information တစ်ခုခုကို သယ်သွားပေးဖို့လိုပါတယ်။ အဲ့ဒီ identifier information လေးကိုလည်း user က page တစ်ခုပြောင်းတိုင်း username နဲ့ password ရိုက်ထည့်နေစရာမလိုဘဲ သယ်သွားပေးနိုင်ရပါမယ်။ ဒါမှ user experience အရအဆင်ပြေမှာပါ။ ဒီလိုအခြေအနေ မျိုးကို ဖြေရှင်းဖို့ အတွက် cookie ဆိုတာ ဖြစ်လာပါတယ်။
Cookie ဆိုတာတော့ browser ထဲမှာသိမ်းထားတဲ့ data သေးသေးလေးတွေပါပဲ။ Browser မှာသိမ်းတယ်ဆိုကတည်းက ကိုယ့် device မှာသိမ်းတာပါပဲ။ ကိုယ့် storage ထဲကပဲပေါ့။ ဒါပေမဲ့ cookie တွေက အလွန်သေးငယ်တဲ့ data ဖြစ်လို့ အများဆုံး 4KB လောက်အထိပဲ ရှိနိုင်ပါတယ်။
သူတို့ကို ထိထိရောက်ရောက်သုံးဖို့အတွက် အများကြီးလဲမလိုပါဘူး။ Cookie တွေကို key နဲ့ value ဆိုပြီးတွဲပြီးသိမ်း ကြပါတယ်။ Cookie တွေကို မိမိတို့ အသုံးပြုတဲ့ website တွေကပဲ သတ်မှတ်ပါတယ်။ အဲ့လိုသတ်မှတ်ပြီး browser မှာသိမ်ထားတဲ့ cookie တွေကို website တူနေရင် request လုပ်တိုင်ထည့်ထည့်ပို့ပေးပါတယ်။ အဲ့တာကို မြင်သာအောင် ကျွန်တော်တို့ရဲ့ social media site လေးရဲ့ ဥပမာနဲ့ပဲ ပြပါမယ်။
User တစ်ယောက်ဖြစ်တဲ့ kyaw kyaw က ကျွန်တော်တို့ ရဲ့ site လေးကို login ၀င်လာပြီဆိုပါစို့။ သူ့ရဲ့ email နဲ့ password ရိုက်ထည့်မယ်ပေါ့။ သူရိုက်ထည့်ပြီး login ခလုတ်ကို နှိပ်လိုက်တဲ့ အချိန်မှာ သူ့ဆီကနေ server ကို request တစ်ခုသွားတက်ပါတယ်။ အဲ့ request ထဲမှာ သူ့ရဲ့ email နဲ့ password ပါသွားပါမယ်။
server ကိုရောက်တဲ့အခါမှာတော့ server က ပို့လိုက်တဲ့ email နဲ့ password မှန်မမှန်၊ ရှိမရှိ database နဲ့ တိုက်စစ်ပါတယ်။ မှန်တယ်ဆိုရင် server က kyaw kyaw အတွက် သီးသန့်ဖြစ်တဲ့ unique ဖြစ်တဲ့ token လေးတစ်ခုကို ဖန်တီးပြီး kyaw kyaw ဆီ/browser ဆီကို ပြန်ပို့လိုက်ပါတယ်။ Browser ကအဲ့ဒီ token ဆိုတဲ့ data လေးကို ခုနက ပြောတဲ့ အတိုင်း ဒီ social media site ရဲ့ cookie တစ်ခုအနေနဲ့ လက်ခံသိမ်းဆည်း ထားလိုက်ပါတယ်။
[ token : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 ]
ဒါက မြင်သာအောင်ပြတာပါ။ လက်တွေ့မှာ user experience ကောင်းဖို့ site တွေက cookie တွေအမျိုးမျိုးကို လုပ်ဆောင်မှုအမျိုးမျိုးအတွက် သုံးကြပါတယ်။

အဲ့တာဆို kyaw kyaw က site ထဲဝင်လို့ရသွားပါပြီ။ ဒါကို authenticate ဖြစ်သွားတယ်လို့လည်း ခေါ်ပါတယ်။
kyaw kyaw က home page မှာမကြည့်ချင်တော့ပဲ photo page ကိုသွားချင်တယ်ဆိုပါတော့။ အဲ့အခါမှာလည်း kyaw kyaw က photo page ကိုသွားတဲ့ ခလုတ်လေးကို နှိပ်လိုက်တာနဲ့ ခုနကလိုပဲ kyaw kyaw ရဲ့ browser က server ဆီကို request တစ်ခုလုပ်ပါတယ်။၊
kyaw kyaw ရဲ့ browser က request လုပ်တိုင်းမှာ ဒီ social media site အတွက် browser ထဲမှာသိမ်းထားတဲ့ Cookie ရှိမရှိ အရင်ကြည့်ပါတယ်။ ရှိခဲ့တယ်ဆိုရင် အဲ့ဒီ cookie တွေအကုန်လုံးကို request နဲ့အတူ ထည့်ပြီး server ထံပေးပို့သွားမှာပါ။
kyaw kyaw မှာ ဒီ site ရဲ့ cookie [ token : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 ] ရှိနေတဲ့အတွက် ဒီ token လေးကို တွဲပြီးပေးပို့သွားပါတယ်။ server က request ကို လက်ခံရရှိတဲ့အခါမှာ kyaw kyaw ရဲ့ token ဟုတ်မဟုတ် ခုနကလိုပဲနဲ့တိုက်ဆိုင်စစ်ဆေးပါတယ်။ ဟုတ်တယ်ဆိုရင် သူတောင်းလိုက်တဲ့ photo page ကို ပြန်ပေးလိုက်ပါတယ်။ ဒီလိုနဲ့ ဒီ site မှာရှိတဲ့ ဘယ် page ကိုမဆို ဘယ် resource ကိုမဆို request လုပ်တိုင်းမှာ cookie ထဲမှာရှိတဲ့ data တွေကို သုံးနေတဲ့ kyaw kyaw တောင်သိစရာမလို့လိုက်ပဲ ထည့်ထည့်ပြီး ပို့ပေးပါတယ်။ ဒီလိုနဲ့ သုံးတဲ့သူက site တစ်ခုထဲကို ၀င်သွားပြီး ဒီ page တွေ ဒီ resource တွေကို access လုပ်လို့ရတယ်ဆိုတဲ့ တစ်ဆက်တည်းဖြစ်တဲ့ seemless feeling ကိုရတာပါ။ တကယ်တော့ server က request တစ်ခုနဲ့ တစ်ခုသီးခြားစီပဲ treat လုပ်ပါတယ်။
ကျွန်တော် ‘ဒီ site’ လို့ ထည့်ထည့်ပြောနေရတာက browser က အခြား site ကိုလုပ်တဲ့ request တွေမှာ ဒီ site က cookie တွေကို ထည့်ပို့မှာမဟုတ်ပါဘူး။ ဆိုလိုတာက facebook.com အတွက် login ၀င်ထားတုန်းက browser ထဲမှာရှိနေတဲ့ cookie ကို twitter.com သွားသုံးတဲ့အခါ ထည့်ထည့် မပို့ပါဘူး။ ထို့နည်းတူ twitter.com သုံးတုန်းက cookie ကိုလည်း တခြား site တွေမှာထည့်ပို့မှာ မဟုတ်ပါဘူး။
[အဲ့လိုသာ ပို့ရရင် browser ထဲမှာ ကိုယ်ကြည့်ထား ၀င်ထားသမျှ site တွေရဲ့ cookie တွေအကုန်လုံး အမြဲတမ်း ပို့နေရလို့ လေးကုန်မှာပါ၊ ဒီနေရာမှာ site နဲ့ပြောတာထက် request နဲ့ပြောတာပိုမှန်ပါမယ်၊ အများအားဖြင့် site တွေမှာက site တစ်ခုထဲကနေ site ပေါင်းများစွာကို request လုပ်ပြီး ပုံတွေ၊ ကြော်ငြာတွေ ထည့်ထားကြတတ်လို့ပါ]
ကျွန်တော်အပေါ်က ပြောခဲ့တဲ့ login/authentication ဥပမာလေးက cookie တွေရဲ့ အသုံး၀င်မှု တစ်စိတ်တစ်ပိုင်းသာ ရှိပါသေးတယ်။ ဒါက မြင်သာအောင် အများသုံးတဲ့ login system လေးနဲ့ ပြောပြတာပါ။
cookie ကိုတခြားဥပမာနဲ့ ပေးရရင် ကျွန်တော်တို့ Amazon တို့ဘာတို့မှာ online shopping လုပ်ရင် ‘cart system’ ကိုမြင်ဖူးကြမှာပါ။ ‘Add to cart’ ဆိုရင် cart ထဲကိုထည့်၊ ကြိုက်ရာပစ္စည်းတွေကို ရွေးထည့်ပြီးရင် နောက်ဆုံးမှ counter မှာရှင်းရတဲ့ ပုံစံမျိုးလုပ်ထားတာပါ။ cart ထဲမှာရှိတဲ့ ပစ္စည်းတွေရဲ့ data ကို cookie အနေနဲ့ သိမ်းထားပေးတာပါ။
ဥပမာ ကျွန်တော်က စာအုပ်လေးတစ်အုပ် ခြင်းတောင်းထဲထည့်ပြီးသွားရင် တခြား page တွေလျှောက်ကြည့်ပြီး တခြားဟာတွေ ထည့်ချင်ထည့်ဦးမှာပါ။ တခြား page တွေသွားခေါ်ကြည့် [request လုပ်] တိုင်းမှာလည်း ကျွန်တော့် cookie ထဲမှာရှိတဲ့ ကျွန်တော် ပစ္စည်းဘယ်နှခု ထည့်ထားတယ်ဆိုတဲ့ data ကို ထည့်ထည့်ပို့ပေးသွားမှာပါ။ အဲ့အခါမှာ server က ကျွန်တော် ဘယ်နှခု ၀ယ်ထားပြီလဲဆိုတာသိပြီး ပြန်ပို့တဲ့ page တွေမှာလဲ cart နေရာမှာ (1) တို့ဘာတို့ noti လေးတက်တာတို့ ဖြစ်နေတာပါ။

ဒီလိုနဲ့ cookie တွေကို အသုံးပြုခြင်းအားဖြင့် browser တွေ application တွေမှာ login တစ်ခါ၀င်ပြီးထားရင် နောက်ထပ်၀င်စရာမလိုတာမျိုး၊ ကိုယ်သုံးထားတဲ့ website တွေပေါ်မူတည်ပြီး third-party cookie တွေနဲ့ personalized advertisement တွေ feature တွေ တက်နေတာမျိုးတွေ လုပ်လို့ရနိုင်လာပါတယ်။
ဆက်လက်ဖော်ပြပါဦးမည်။
Kevin
Note – စာဖတ်သူအများစု ဖတ်ရှုရအဆင်ပြေစေရန် Single Page Application များ၊ Token ဖြင့် identifiy လုပ်ရာတွင် သုံးသည့် JWT၊ Cookie Types၊ Local Storage စသည့်နည်းပညာအချို့ကို ချန်လှပ်ထားခဲ့ပါသည်။
Next Post, Previous Post မနှိပ်ဘဲ OUO Link ကနေ ၁ပုဒ်ချင်းဝင်ဖတ်ပြီး ကူညီပါ။
အသိအမြင်၊ အတွေးအခေါ် အသစ်တစ်ခုခုရသွားလို့ လှူဒါန်းလိုပါက Science Nuts (Facebook Page) ကို ဆက်သွယ်လှူဒါန်းနိုင်ပါတယ်။
လှူသမျှငွေအကုန်လုံးကို လိုအပ်တဲ့နေရာတွေမှာ ပြန်လည်လှူဒါန်းပေးသွားမှာပါ။