PHP Session သည် အသုံးပြုသူအချက်အလက်များကိုဆာဗာပေါ်ရှိအသုံးပြုသူအချက်အလက်များကိုထူးခြားသော session ID ကို အသုံးပြု. သိမ်းဆည်းထားသည်။ အသုံးပြုသူတစ် ဦး သည်တောင်းဆိုသည့်အခါတိုင်း PHP သည် session ID ကိုရှာဖွေပြီးသက်ဆိုင်ရာ session data ကို load လုပ်လိမ့်မည်။ ဒေတာများကိုများသောအားဖြင့် $ _Session hyperglobal variable ကိုမှတဆင့်ဝင်ရောက်သည်။
PHP သည်အချက်အလက်များကိုအရာ 0 တ်ထုများသို့မဟုတ် arrays များကို string strings strings strings string in သို့ပြောင်းလဲရန်အတွက်သိုလှောင်ထားသည့် Serialize function ကိုအလိုအလျောက်အသုံးပြုသည် ။
သို့သော်တစ်ခါတစ်ရံတွင်ကျွန်ုပ်တို့သည်ဤ serialized ဒေတာများကိုတိုက်ရိုက် 0 င်ရောက်ခြင်းသို့မဟုတ်၎င်းတို့အားကိုယ်တိုင်လုပ်ချင်သည် ။
serialized strings များကို PHP variable များသို့ပြောင်းလဲရန် unialialize function ကိုအသုံးပြုသည်။
<span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-title function_ invoke__">unserialize</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$data</span></span><span> [, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$options</span></span><span> = [] ] )
</span></span>$ ဒေတာ : deserialize ဖို့ string ကို။
$ ရွေးစရာများ - အပို deserialization control ကိုထောက်ပံ့ပေးသော optional parameter (PHP 7+ အထောက်အပံ့) ။ ဥပမာအားဖြင့် deserialization ခွင့်ပြုသည့်အတန်းကိုသတ်မှတ်နိုင်သည်။
အောင်မြင်သောအခါ deserialized variable ကိုပြန်လည်ရောက်ရှိစေပြီးပျက်ကွက်သည့်အခါ မှားယွင်းသောအယူမှား ပြန်ပို့သည်။
ကျွန်ုပ်တို့တွင်အခြေခံအသုံးပြုသူအချက်အလက်အချို့ပါ 0 င်သောအသုံးပြုသူထုရှိသည်ဆိုပါစို့။ ကျွန်ုပ်တို့သည်အရာဝတ်ထုကိုကိုယ်တိုင် 0 န်ဆောင်မှုပေးပြီး၎င်းကို session တစ်ခုတွင်သိမ်းဆည်းထားလိမ့်မည်။
<span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();
</span><span><span class="hljs-comment">// အသုံးပြုသူအရာဝတ်ထုတစ်ခုဖန်တီးပါ</span></span><span>
</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">User</span></span><span> {
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$name</span></span><span>;
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$email</span></span><span>;
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">__construct</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$name</span></span></span><span>, </span><span><span class="hljs-variable">$email</span></span><span>) {
</span><span><span class="hljs-variable language_">$this</span></span><span>->name = </span><span><span class="hljs-variable">$name</span></span><span>;
</span><span><span class="hljs-variable language_">$this</span></span><span>->email = </span><span><span class="hljs-variable">$email</span></span><span>;
}
}
</span><span><span class="hljs-comment">// instantiate အသုံးပြုသူအရာဝတ်ထု</span></span><span>
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">User</span></span><span>(</span><span><span class="hljs-string">'John Doe'</span></span><span>, </span><span><span class="hljs-string">'[email protected]'</span></span><span>);
</span><span><span class="hljs-comment">// အသုံးပြုသူအရာဝတ်ထုကို serialize လုပ်ပါ session</span></span><span>
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>] = </span><span><span class="hljs-title function_ invoke__">serialize</span></span><span>(</span><span><span class="hljs-variable">$user</span></span><span>);
</span></span>အထက်ပါကုဒ်တွင် အသုံးပြုသူ အတန်းကိုဖန်တီးပြီးအသုံးပြုသူအရာဝတ်ထု John Doe ကိုသိမ်းဆည်းခြင်းနှင့်၎င်းကို $ _Session ['user_Data') တွင်သိမ်းဆည်းထားသည်။
ဒေတာများကို session တွင်သိမ်းထားသည်နှင့်တပြိုင်နက်၎င်းကိုနောက်ဆက်တွဲတောင်းဆိုမှုများတွင်ပြန်လည်ရယူနိုင်သည်။ unserialize function ကိုမှတစ်ဆင့်ကျွန်ုပ်တို့သည် session တွင်သိမ်းဆည်းထားသော serialized data များကိုမူလအရာဝတ်ထုပုံစံသို့ပြန်ယူနိုင်သည်။
<span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();
</span><span><span class="hljs-comment">// စစ်ဆေးကြည့်ရှု session မဆိုရှိပါသလား 'user_data' အချက်များ</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>])) {
</span><span><span class="hljs-comment">// ပင်လယ်အေထက် session အချက်များ</span></span><span>
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-title function_ invoke__">unserialize</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>]);
</span><span><span class="hljs-comment">// output ကိုအသုံးပြုသူသတင်းအချက်အလက်</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Name: '</span></span><span> . </span><span><span class="hljs-variable">$user</span></span><span>->name . </span><span><span class="hljs-string">'<br>'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Email: '</span></span><span> . </span><span><span class="hljs-variable">$user</span></span><span>->email . </span><span><span class="hljs-string">'<br>'</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'No user data found in session.'</span></span><span>;
}
</span></span>ဒီကုဒ်ထဲမှာ $ _Session ['user_Data'] တည်ရှိရှိမရှိပထမ ဦး ဆုံးစစ်ဆေး။ အကယ်. ၎င်းတည်ရှိပါက အသုံးပြုသူ အရာဝတ်ထုကိုပြန်လည်ထူထောင်ရန်နှင့်ထိုအရာဝတ်ထု၏ဂုဏ်သတ္တိများကိုထုတ်ယူရန် unserialize function ကိုအသုံးပြုသည်။
unserialize function ကိုအသုံးပြုသောအခါလုံခြုံရေးပြ issues နာများကိုအထူးဂရုပြုရမည်။ အထူးသဖြင့်စိတ်မထားသောသတင်းရင်းမြစ်များမှဒေတာများကိုစွန့်ခွာသောအခါ၎င်းသည်အရာဝတ်ထုဆေးထိုးတိုက်ခိုက်မှုများကိုဖြစ်ပေါ်စေနိုင်သည်။ ၎င်းသည်တိုက်ခိုက်သူအားအန္တရာယ်ရှိသော serialized ဒေတာကိုတည်ဆောက်ခြင်းဖြင့်အန္တရာယ်ရှိသောလုပ်ငန်းများကိုလုပ်ဆောင်ရန်ခွင့်ပြုနိုင်သည်။ ထို့ကြောင့်အဆင် သင့်မဖြစ်စေရ သည့်အခါထိုကဲ့သို့သောပြ problems နာများကိုရှောင်ရှားရန်လုံခြုံရေးအစီအမံများကိုထည့်ရန်အကြံပြုသည်။
PHP 7+ တွင် deserialized classes ကိုယာယီ ခွင့်ပြုထားသော အတန်းများကိုခွင့်ပြုထားသည်။ ဥပမာအားဖြင့်, ကန့်သတ်ချက်သည် အသုံးပြုသူ အတန်းများကိုသာ deserire လုပ်နိုင်သည်။
<span><span><span class="hljs-variable">$options</span></span><span> = [</span><span><span class="hljs-string">'allowed_classes'</span></span><span> => [</span><span><span class="hljs-string">'User'</span></span><span>]];
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-title function_ invoke__">unserialize</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_data'</span></span><span>], </span><span><span class="hljs-variable">$options</span></span><span>);
</span></span>ဤနည်းအားဖြင့် အသုံးပြုသူ အတန်းအစား၏အရာဝတ်ထုများကိုသာစွန့်ပစ်နိုင်သည်။ အခြားအတန်းများကိုပိတ်ဆို့ခံရလိမ့်မည်။
unserialize သည် Cross-version သို့မဟုတ် Cross-server php ပတ်ဝန်းကျင်တွင်လိုက်ဖက်တဲ့ပြ issues နာများကိုတွေ့ကြုံခံစားနိုင်သည်။ ဥပမာအားဖြင့်, Class သည်မတူညီသောဗားရှင်းပြောင်းလဲမှုရှိပါက deserialization ပျက်ကွက်နိုင်သည်။ ဤပြ problem နာကိုရှောင်ရှားရန် developer များသည် JSONS_CETDED နှင့် JSON_Decode ကို အခြားနည်းလမ်းများအဖြစ်အသုံးပြုရန်အတွက်အထူးသဖြင့်ရိုးရှင်းသောဒေတာအဆောက်အအုံများပါ 0 င်သည်။