PHP တွင် Custom Session Handler သည်အထူးသဖြင့် session data session ကိုဒေတာဘေ့စ် (သို့) အခြားသိုလှောင်မှုမီဒီယာသို့မဟုတ်အခြားသိုလှောင်ရေးမီဒီယာတစ်ခုသို့သိမ်းဆည်းရန်လိုအပ်သည်။ PHP သည်ကြွယ်ဝသော session processing interface ကိုထောက်ပံ့သော်လည်း Session_register_shutdown () function ကိုမမှန်မကန်အသုံးပြုခြင်းသည်အချိန်မီသိုလှောင်မှုစနစ်သို့စာရေးရန်ပျက်ကွက်ခြင်းသို့မဟုတ်ပျက်ကွက်ခြင်းများပြုလုပ်နိုင်သည်။
ပုံမှန်အားဖြင့် PHP သည် Session Data ကို Session.save_path ဖြင့်သတ်မှတ်ထားသည့် direction တစ်ခုတွင်သိမ်းဆည်းရန်ဖိုင်စနစ်ကိုအသုံးပြုသည်။ သို့သော်ဖြန့်ဝေထားသောစနစ်များသို့မဟုတ်စွမ်းဆောင်ရည်မြင့်မားသောလိုအပ်ချက်များရှိသည့်နေရာများတွင်ဖိုင်စနစ်များသည်အကောင်းဆုံးရွေးချယ်မှုမဟုတ်ပါ။ ဤအချိန်တွင်စိတ်ကြိုက် session handler သည်အထူးအရေးကြီးသည်။
ဥပမာအားဖြင့်, ကျွန်ုပ်တို့သည်စာဖတ်ခြင်းကိုတိုးတက်စေရန်အတွက် session database တစ်ခုသို့ Session database သို့ Session Data တစ်ခုသို့သိုလှောင်ထားသော Session Processor ကိုဖန်တီးနိုင်သည်။
Session_register_shutdown () သည် Session ကိုပိတ်လိုက်သည့်အခါ PPP မှပေးသော PHP မှပေးသောလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ အထူးသဖြင့်၎င်းသည် session ကိုအချက်အလက်များကိုအပြည့်အဝရေးသားနိုင်ရန်အတွက် screen_write_close () ကိုအလိုအလျောက်ခေါ်ဆိုလိမ့်မည်။
ပုံမှန်အားဖြင့် PHP ၏ session processing ယန္တရားသည် session_write_close () ကို အလိုအလျောက်ခေါ်ဆိုလိမ့်မည်။
class MySessionHandler implements SessionHandlerInterface {
public function open($savePath, $sessionName) {
// ဆက်သွယ်မှုကိုစတင်ပါ,ဥပမာအားဖြင့်ဆက်သွယ်မှု Redis
return true;
}
public function close() {
// ဆက်သွယ်မှုကိုပိတ်ပါ
return true;
}
public function read($id) {
// မှ Redis session data ကိုဖတ်ပါ
return ''; // string ကိုပြန်သွားပါ
}
public function write($id, $data) {
// ရေးသား Redis,ဥပမာအားဖြင့် m66.net Redis နမူနာ
file_get_contents('https://m66.net/write-session?id=' . $id); // 示例ရေးသား
return true;
}
public function destroy($id) {
// session တစ်ခုဖျက်ပစ်ပါ
return true;
}
public function gc($maxlifetime) {
// သက်တမ်းကုန်ဆုံးအစည်းအဝေးများ
return true;
}
}
$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();
// ... Execution Logic,သို့သော်မှတ်ပုံတင်ခြင်းမရှိပါ shutdown
အထက်ဖော်ပြပါကုဒ်တွင် script သည်အပြေးနေစဉ်အတွင်းဇာတ်ညွှန်းကိုမရပ်တန့်ပါ က Method () နည်းလမ်းကိုမခေါ်နိုင်ပါ။ သိမ်းဆည်းခြင်းမပြုရ။
class MySessionHandler implements SessionHandlerInterface {
public function open($savePath, $sessionName) {
return true;
}
public function close() {
return true;
}
public function read($id) {
return '';
}
public function write($id, $data) {
// သွား m66.net မြဲ interface အချက်အလက်များ
file_get_contents('https://m66.net/api/session-write?id=' . $id); // နမူနာခေါ်ဆိုမှု
return true;
}
public function destroy($id) {
return true;
}
public function gc($maxlifetime) {
return true;
}
}
$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_register_shutdown(); // ပရိုဆက်ဆာကိုပိတ်ရန် session တစ်ခုကိုမှတ်ပုံတင်ပါ
session_start();
session_register_shutdown ()) သည်အချည်းနှီးသို့မဟုတ် ထွက်ရန်စောစီးစွာခေါ်ဆိုမှုကြောင့်ဇာတ်ညွှန်းသည်အဆုံးသတ်ခြင်း (သို့) အစောပိုင်းခေါ်ဆိုမှုကြောင့် () သည်အဆုံးသတ်ခြင်းကိုမှန်ကန်စွာရေးသားရန်သေချာစေနိုင်သည်။
စိတ်ကြိုက် session တစ်ခုကိုင်တွယ်သူသည်အလွန်ပြောင်းလွယ်ပြင်လွယ်ကိုပေးသည် ။ session_register_shutdown () ကိုအမြဲတမ်းအတိအလင်းပြောရန်အကြံပြုသည်။