Cookies အကြောင်း သိကောင်းစရာ
Cookies အကြောင်းကို ဟိုးအရင် PHP ကို စလေ့လာ ကတည်းက အသေးစိတ် သိချင်နေခဲ့ပါတယ်။ ဒီလိုနဲ့ tutsplus က Introduction to Cookies ကို ဖတ်ကြည့်တော့ တော်တော် သဘောကျ သွားတယ်။ PHP မှာ ဘယ်လိုရေးမယ် JavaScript ဘယ်လိုရေးမယ် စသည်ဖြင့် သေသေ ချာချာ ရေးပြထားပါတယ်။ (ကျွန်တော်ကတော့ PHP တစ်ခုတည်းအတွက်ပဲ ရေးထားပါတယ်) ဒါကြောင့် တကယ်ပြည့်စုံတဲ့ ပို့စ်ကိုပဲ ဘာသာပြန်ပြီး တင်လိုက်ရပါတယ်။
Cookies ဆိုတာ ဘာလဲ
Cookies ဆိုတာ ကိုယ့်စက်ထဲမှာ လာသိမ်းထားတဲ့ Text File တွေပဲလို့ အများအားဖြင့် သိထားကြပါတယ်။ Website တွေရဲ့ အရှင်သခင်တွေ ဖြစ်တဲ့ Web Server တွေရဲ့ တောင်းဆိုချက်အရ ကိုယ့်စက်ရဲ့ Internet Browser တွေက ကိုယ့်စက်ထဲမှာ ဖန်တီးလိုက်တဲ့ Text Files တွေ ဆိုပါတော့။ ကိုယ့်စက်ထဲမှာ Browser က ဆောက်လိုက်ပြီ ဆိုတာနဲ့ Request လုပ်တဲ့ WebServer အနေနဲ့ အဲဒီ Text Files (Cookies) တွေထဲမှာ ရှိတဲ့ Content တွေကို Read လို့လည်း ရသလို Write လို့လည်း ရသွားပါတယ်။ ကိုယ့်စက်ထဲကို ကျူးကျော် ဝင်ရောက်လာတာ ဆိုတော့ ဘဝင်မကျစရာ ကောင်းတယ်၊ အန္တရာယ်ရှိတယ်လို့ ထင်စရာ ရှိပါတယ်။ ဒါပေမယ့် အတိုင်းအတာ တစ်ခုအထိ လုံခြုံစိတ်ချ နိုင်ဖို့ Cookies တွေအတွက် ကန့်သတ်ချက်တွေကတော့ ရှိနေပါတယ်။ အဲဒီ ကန့်သတ်ချက်တွေကတော့
- Web Servers တွေ အနေနဲ့ သူဒိုမိန်းနဲ့ သူပဲ Cookies တွေကို Access လုပ်နိုင်ပါတယ်။ Web Server က Cookie အတွက် Request လုပ်လိုက်ပြီ ဆိုတာနဲ့ Internet Browser က ဘယ် Domain အတွက် ဆိုတာ တစ်ခါတည်း သတ်မှတ်လိုက်ပါတယ်။ အဲဒီ Domain ဆိုတဲ့ နေရာမှာလည်း Domain လည်း ဖြစ်နိုင်သလို Sub Domain လည်း ဖြစ်နိုင်ပါတယ်။ Web Server ရဲ့ Request ပေါ် မူတည်တာပေါ့။ သူက Domain နဲ့ Request လုပ်မယ်ဆိုရင် Browser က Domain နဲ့ မှတ်ထားပါတယ်။ Sub Domain နဲ့ လုပ်မယ်ဆိုရင် Sub Domain နဲ့ မှတ်ထားပါလိမ့်မယ်။ ဒါပေမယ့် google.com က cookie ကို Mozilla.com ဖတ်လို့ မရသလို Mozilla.com က Cookie ကို google.com က ဖတ်လို့ မရပါဘူး။
- Cookie တွေက HTTP Protocol ကနေ လာတာပါ၊ ဒီတော့ HTTP ရဲ့ ကန့်သတ်ချက်အရ 4096 Bytes (4KB) ထက် ကြီးလို့ မရပါဘူး။
- Domain တစ်ခုခြင်းစီအလိုက် Cookie အရေအတွက် ခွင့်ပြုမှု ပမာဏမှာလည်း ကန့်သတ်ချက် ရှိပါတယ်။ Browser ပေါ် မူတည်ပြီး ခွင့်ပြုတဲ့ အရေအတွက် ကွာခြားပါတယ်။ သို့သော်လည်း အများအားဖြင့် အခု ၂၀ သတ်မှတ်ထားကြပါတယ်။ Domain တစ်ခုကို Cookie အခု ၂၀ ခွင့်ပြုတယ် ဆိုပါတော့။ အဲဒီလို ကန့်သတ်ထားရခြင်း ရည်ရွယ်ချက်က Domain တွေအနေနဲ့ ကိုယ့်စက်ထဲမှာ Cookie တွေ အများကြီးထည့်ပြီး Hard Disk Space ကို မဖြုန်းစေချင်လို့ပါ။
- ကိုယ့်စက်ထဲက Hard Disk မှာ မှတ်ခွင့်ရှိတဲ့ Cookie အရေအတွက် စုစုပေါင်းမှာလည်း ကန့်သတ်ချက်ရှိပါတယ်။ အဲဒီ အကန့်အသတ်ကလည်း Browser အလိုက် ကွာခြားတယ် ဆိုပေမယ့် အများအားဖြင့် အခု ၃၀၀ သတ်မှတ်ထား တတ်ပါတယ်။ စုစုပေါင်း ကန့်သတ်ချက်ထက် ကျော်သွားရင်တော့ အဟောင်းဆုံး Cookie တွေကို ဖျက်ပစ်ပါလိမ့်မယ်။ အသစ်အသစ်တွေ ဝင်လာတယ် အရေအတွက် ကန့်သတ်ချက်ထက် ကျော်လာတယ်ဆိုရင် အဟောင်း အဟောင်း တွေကို ဖျက်ပစ်မယ် ဆိုပါတော့။
Cookies တွေမှာ Expired Date (သက်တမ်းကုန်တဲ့ နေ့) ရှိပါတယ်။ အဲဒီလို Expired Date သတ်မှတ်ထားတဲ့ အတွက် Browser အနေနဲ့ Web Server က ဒီနေ့တွေ ကျော်သွားရင် မလိုတော့ဘူးဆိုတာ သိပြီး မလိုတာတွေကို ဖျက်နိုင်ပါတယ်။ အကယ်၍ Expired Date မပါဘူး ဆိုရင်တော့ Server နဲ့ ဆက်သွယ်မှု ရပ်တန့်သွားတာနဲ့ ဖျက်ပစ်ပါလိမ့်မယ်။ အဲဒီလို Server နဲ့ ဆက်သွယ်မှု ရပ်တန့်တယ်ဆိုတာ Window ကို ဖြစ်ဖြစ် Browser ရဲ့ Tab တွေကို ဖြစ်ဖြစ် အသုံးပြုသူက လုံးဝပိတ်ပစ်လိုက်တာကို ဆိုလိုပါတယ်။ အဲဒီလို ပိတ်ပြီဆိုတာနဲ့ Date မပါတဲ့ Cookies တွေကို Broswer က ဖျက်ပြီးသားပဲလို့ အဓိပ္ပါယ်ရပါတယ်။ အဲဒီလို Expired Date မပါတဲ့ Cookies တွေကို Session Cookies လို့လည်း ခေါ်တတ်ပါတယ်။ အများအားဖြင့် temporary settings (ယာယီ သတ်မှတ်ချက်များ) တွေကို သိမ်းတဲ့နေရာမှာ အသုံးများပါတယ်။
Cookies ကို ဘယ်လိုသုံးလဲ
Cookies တွေ ဖန်တီးတယ်ဆိုတာ User Level မဟုတ်ပါဘူး။ Technical Level ပါ။ Cookies ကို ဘယ်လုံးသုံးလဲ သိနိုင်ဖို့ Technical Level ကို လေ့လာရမှာ ဖြစ်ပါတယ်။ Cookies တွေက HTTP Protocol တွေကတစ်ဆင့် အပေးအယူ လုပ်ရပါတယ်။ HTTP Protocol ကို Browsers တွေအနေနဲ့ Server တွေဆီကို ဖိုင်တွေ လှမ်းယူတဲ့နေရာ လှမ်းပို့တဲ့ နေရာတွေမှာ သုံးပါတယ်။ Cookie တစ်ခုကို Server က Request လုပ်ပြီးပြီ Browser ကလည်း ဆောက်ပြီးပြီ ဆိုတာနဲ့ Browser က Cookie မှာ သတ်မှတ်ထားတဲ့ Domain တွေနဲ့ သက်ဆိုင်တဲ့ Web Pages တွေမှာ အပြောင်းအလဲတွေ ရှိပြီဆိုတိုင်း Cookies တွေကို Server ဆီ လှမ်းလှမ်းပို့ ပေးနေမှာ ဖြစ်ပါတယ်။ အောက်မှာ ပြထားတဲ့ snippet ကတော့ Server က request လုပ်တဲ့ နမူနာ Cookie တစ်ခုပါ။ (အဲဒီ Snippet က HTTP Response ရဲ့အစိတ်အပိုင်းထဲမှာ ပါပါတယ်)
Set-Cookie: Name=content data; expire=Fri, 21-Dec-2010 23:59:59 GMT; path=/; domain=.exam
အဲဒီ စာကြောင်းလေးကို လေ့လာကြည့်ရအောင်
Set-Cookie: Browser ကို Cookie တစ်ခု အသစ်လုပ်လို့ကြောင်း Server က အသိပေး အကြောင်းကြားတဲ့ Command ပါ။
Name: Cookie ရဲ့ အမည်ပါ။ Domain တစ်ခုခြင်းစီမှာ Cookies တွေ အများကြီး ဆောက်ချင်ရင်တော့ (အခုနှစ်ဆယ် အထိရပါတယ်) နာမည်တွေ မတူအောင် ပေးရမှာ ဖြစ်ပါတယ်။ အဲဒီလို ပေးထားမှသာ Browser အနေနဲ့ ခွဲခြားပြီး သိမ်းထားလို့ ရမှာ ဖြစ်ပါတယ်။ =content data ဆိုတဲ့ နေရာမှာတော့ cookie ထဲမှာ ပါမယ့် Data တွေကို ထည့်တဲ့နေရာပါ။ data တွေ ဆိုတဲ့နေရာမှာ Text String တွေလည်း ဖြစ်နိုင်သလို number တွေလည် ဖြစ်နိုင်ပါတယ်။ 4KB ထက်တော့ ကျော်လို့ မရဘူးပေါ့။
expires= ဒါကတော့ expiration date ကို သတ်မှတ်တဲ့ command ပါ။ expiration date ရဲ့ Format ကတော့”Wdy, DD-Mon-YYYY HH:MM:SS GMT” ဆိုတဲ့ ပုံစံပါ။ expiration date ရဲ့ Format က ရှည်လျှား ထွေပြားတယ် ဆိုပေမယ့် Programming Language တွေ အနေနဲ့ အဲဒီအတွက် လွယ်လွယ် ရေးလို့ရအောင် ဖန်တီးပေးထား တတ်ကြပါတယ်။ အဲဒီ expiration date ကိုကြည့်ပြီး Browser က အလို အလျောက် ဖျစ်ပစ်မှာ ဖြစ်ပါတယ်။
domain and path: အဲဒီ အပိုင်းကိုတော့ ဒီထက်ပိုပြီး ထဲထဲဝင်ဝင် ရှင်းလင်းပြဖို့ လိုပါလိမ့်မယ်။ Domain ဆိုတာကတော့ Cookie အနေနဲ့ Active ဖြစ်မယ့် Domain ကို သတ်မှတ်ပေးတာပါ။ အကယ်၍ Domain က ads.google.com ဆိုရင် Cookie က အဲဒီ ဒိုမိန်းတစ်ခုတည်း အတွက် Active ဖြစ်မှာ ဖြစ်ပြီး၊ အကယ်၍ google.com ဆိုရင်တော့ google.com နဲ့ ပတ်သက်တဲ့ server တွေ subdomains တွေ Cookie က Active ဖြစ်မှာ ဖြစ်ပါတယ်။ google.com ဆိုရင် google.com, ads.google.com, mail.google.com စသည်ဖြင့် အကုန်လုံးအတွက် active ဖြစ်မှာကို ဆိုလိုပါတယ်။
The path: path ဆိုတာကတော့ browser အနေနဲ့ Cookie ကို ပြန်ပို့ရမယ့် domain ရဲ့ path ပါ။ /images/ လို့ သတ်မှတ်ပေးထားမယ် domain အနေနဲ့ ads.google.com လို့ သတ်မှတ်ထားရင် ads.google.com/images/ ကို cookie ပို့ရမှာ ဖြစ်ပါတယ်။ အကယ်၍ ‘/’ လို့သာ သတ်မှတ် ထားရင်တော့ location ကို ကြည့်စရမလိုတော့ပဲ domain ကိုပဲ တန်းပို့မှာ ဖြစ်ပါတယ်။
Cookie ကို ဘယ်လိုဖန်တီးလဲ
ဒီအပိုင်းမှာတော့ Cookie ကို ဘယ်လို ဖန်တီးလဲဆိုတာ လေ့လာကြည့်ပါမယ်။
PHP
PHP ကို သုံးပြီး Cookie တွေ ဖန်တီးတော့မယ် ဆိုရင် အရေးအကြီးဆုံး အချက်က browser ဆီကို Cookies တွေ မပို့ခင် အကုန်သေသေချာချာ သတ်မှတ်ပေးဖို့ လိုတာပါပဲ။
<?php /***Creating a cookie***/ $name = 'clientname'; $value = 'Peter Griffin'; //time() gives current time in seconds, and we add 60 seconds * 30 = 30 minutes //so this cookie expires in 30 minutes. //You may notice that the expire date is in seconds, PHP translates this to //the correct format internally! $expireDate = time() + 60 * 30; $path = '/example/'; $domain = 'test.envato.com'; $secure = false; //only transmit the cookie if a HTTPS connection is established $httponly = true; //make cookie available only for the HTTP protocol (and not for JavaScript) setcookie( $name, $value, $expireDate, $path, $domain, $secure, $httponly); <html> .... //all content etc goes here ?>
အပေါ်မှာ ရေးထားတဲ့ php code တွေကို ကြည့်မယ်ဆိုရင် အပေါ်မှာ ရှင်းပြထားပြီးသား ဖြစ်တာမို့ နားလည်ဖို့ လွယ်ပါလိမ့်မယ်။ ဒါပေမယ့် $secure ဆိုတာနဲ့ $httponly ဆိုတာတော့ ပါလာပါတယ်။ $secure ဆိုတာကတော့ https connection မှာပဲ သုံးပါလို့ Force လုပ်ထားတာ ဖြစ်ပါတယ်။ httponly ဆိုတာကတော့ cookies တွေကို HTTP Protocol တစ်ခုတည်းကပဲ သုံးလို့ရမယ်လို့ သတ်မှတ်တာပါ။ အဲဒီ အဓိပ္ပါယ်က client-side languages တွေ ဖြစ်တဲ့ Javascript တို့ VBScript တို့က Cookie ကို Access လုပ်လို့မရအောင် ကန့်သတ်ထားပါတယ်။ အဲဒီလို သတ်မှတ်ခြင်း အားဖြင့် Cross Site Scripting ရဲ့ အန္တရာယ်ကိုလည်း ကာကွယ်ပြီးသား ဖြစ်သွားစေပါတယ်။ ကိုယ့်အနေနဲ့ Javascript စသည်တို့နဲ့ Cookie ကို editing လုပ်ဖို့ အစီအစဉ် မရှိဘူးဆိုရင် true ပဲ ပေးထားသင့်ပါတယ်။ httponly ကို true ပေးလိုက်တယ်ဆိုတာနဲ့ https ကို ပိတ်လိုက်တယ်လို့ အဓိပ္ပါယ်မရပါဘူး။ အဲဒီနေရာမှာ နားလည်မှု လွဲမှားနိုင်ပါတယ်။ https က $secure နဲ့သာ ဆိုင်ပါတယ်။ အပေါ်မှာ ပြထားကို ချုံ့ပြီးရေးမယ် ဆိုရင်
<?php setcookie( 'clientname', 'Peter Griffin', time()+60*30, '/example/', 'test.envato.com', false,true); ?>
Cookie ကိုတော့ ဖန်တီးလို့ ပြီးပါပြီ။ ဘယ်လို ပြန်ဖတ်မလဲ။ PHP မှာတော့ တော်တော်လွယ်တယ်လို့ ပြောလို့ရမယ် ထင်ပါတယ်။ $_COOKIE[] ဆိုတဲ့ command ကို သုံးနိုင်ပါတယ်။
<?php $cookieValue = $_COOKIE['name of the cookie']; ?>
အဲဒီ $_COOKIE က ရလာတဲ့ Variable ကို အခြား variable တွေလိုပဲ သုံးလို့ရပါတယ်။
အကယ်၍ expiration date, path, domain တို့ကို ပြန်ပြင်ချင်တယ် ဆိုရင် cookie ကို နာမည်တူပေးပြီး ပြင်လို့ ရပါတယ်။ setcookie() ကိုပဲ သုံးရုံပါပဲ။
Cookies ကို ဘာကြောင့်သုံးလဲ
Cookies တွေကို NetScape က ဖန်တီးခဲ့တာပါ။ ပထမ မူလ Cookies တွေကို သုံးရခြင်း ရည်ရွယ်ချက်ကတော့ online shop တွေမှာ shopping cart တွေ ဖန်တီးဖို့ ဖြစ်ပါတယ်။
အခုအချိန်မှာတော့ Cookies ကို ရည်ရွယ်ချက် မျိုးစုံအတွက် သုံးနေကြပါပြီ။ user နဲ့ ပတ်သက်တဲ့ settings တွေ ဖြစ်တဲ့ name, language, location, screen size စတာတွေကို သိမ်းထားခိုင်းလို့ ရပါတယ်။ အဲဒီလို သိမ်းထားခြင်းဖြင့် နောက်တစ်ကြိမ် client တွေ ကိုယ့်ဆိုက်ကို ပြန်သုံးတဲ့ အခါမှာ မှတ်မိနေစေတဲ့အတွက် Service ကို improve လုပ်ပြီးသား ဖြစ်စေပါတယ်။
Cookies သုံးရင် ဘာတွေလိုက်နာသင့်လဲ
- Cookie ထဲမှာ sensitive ဖြစ်တဲ့ အရေးကြီးတဲ့ Data တွေ မထည့်ပါနဲ့။ အသုံးပြုသူတွေအနေနဲ့ အင်တာနက်ကဖေးလို Public နေရာတွေ သုံးနိုင်ပါတယ်။ အဲဒီလို သုံးတဲ့အခါ Client ရဲ့ အရေးပါတဲ့ အချက်အလက်တွေ ကျန်လို့ မဖြစ်ပါဘူး။
- cookies တွေကလာတဲ့ data တွေကို ဘယ်တော့မှ မယုံပါနဲ့။ strings နဲ့ numbers တွေကို အမြဲ filter လုပ်ထားပါ။ attacker တွေ အနေနဲ့ malicious data တွေကို cookie တွေနဲ့ အတူ ထည့်ပေးတတ်လို့ပါ။
- expiration data ကို သေသေချာချာ သတ်မှတ်ပေးပါ။ အဲဒီလို သတ်မှတ်တဲ့ နေရာမှာလည်း client ရဲ့ စက်ထဲမှာ အနှစ်အနှစ် အလလ သိမ်ထားခိုင်းတာမျိုး မဖြစ်ပါစေနဲ့။
- secure တို့ httponly တို့ ကို သုံးပေးပါ။ အကယ်၍ ကိုယ်က HTTPS ကိုသုံးလို့ရတယ် ဆိုရင် HTTPS ကို သုံးနိုင်ဖို့ secure ကို enable လုပ်ပေးပါ။
Facebook comments:


