တစ်ပြိုင်နက်တည်း, ဖြန့်ဖြူးထားသောသို့မဟုတ်ရေရှည် PHP applications များတည်ဆောက်သည့်အခါရိုးရာ File System System Session Session Storage Metessions သည် session spam အချက်အလက်များစုဆောင်းခြင်းကိုဖြစ်ပေါ်စေနိုင်သည်။ ဤပြ problem နာကိုဖြေရှင်းရန် PHP သည် sessionhandlerinterface interface ကိုထောက်ပံ့ပေးပြီး developer များက GC () နည်းလမ်းသည်အမှိုက်သန့်ရှင်းရေးလုပ်ငန်းစဉ်ကိုထိန်းချုပ်ရန်သော့ချက်ဖြစ်သည်။
SessionHandlerinterface :: GC သည် ဤ interface မှသတ်မှတ်ထားသောနည်းလမ်းဖြစ်သည်။ ၎င်း၏ function ကို၎င်းသည် PHP တွင်အမှိုက်များစုဆောင်းခြင်းလုပ်ငန်းများကိုလုပ်ဆောင်ရန် PHP တွင်အချက်အလက်များသက်တမ်းကုန်ဆုံးကြောင်းဆုံးဖြတ်သည်။ နည်းလမ်းလက်မှတ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
public function gc(int $max_lifetime): int|false;
$ max_lifetime : အများဆုံး session ၏အများဆုံးရှင်သန်မှုအချိန် (ယူနစ်: စက္ကန့်) ကိုကိုယ်စားပြုတယ်။
Return Value: သန့်ရှင်းသောအစည်းအဝေးများအရေအတွက်ကိုပြန်လည်ပေးပို့ခြင်းသို့မဟုတ်အောင်မြင်မှုအတွက် မှန်ကန်စွာ ပြန်ပို့ပြီးပျက်ကွက်မှုအပေါ် မှားယွင်းစွာ ပြန်ပို့သည်။
အသုံးပြုသူသည် session processor (စိတ်ကြိုက် session handler) ကိုစိတ်ကြိုက်ပြုပြင်သည့်အခါခေတ်ရေစီးကြောင်း session data ကိုသန့်ရှင်းရေးလုပ်ရန်အတွက်မူဝါဒကိုအကောင်အထည်ဖော်သည့်အခါဤနည်းလမ်းဖြင့်သတ်မှတ်နိုင်သည်။
PHP uses file-based session storage by default, and its GC mechanism is based on probability triggering (controlled by session.gc_probability and session.gc_divisor ), which means it does not run cleaning logic every time it requests.
ဥပမာအားဖြင့်:
session.gc_probability = 1
session.gc_divisor = 1000
အမှိုက်ပုံးသန့်ရှင်းရေးသည် 1/1000 ဖြစ်နိုင်ခြေတွင်အစပျိုးသည်ကိုဖော်ပြသည်။ ဤမဟာဗျူဟာသည်အသွားအလာနည်းသောစနစ်များတွင်အသွားအလာနိမ့်စနစ်များတွင်သက်တမ်းကုန်ဆုံးနိုင်ပြီးစွမ်းဆောင်ရည်အပေါ်သက်ရောက်မှုရှိလာနိုင်သည်။
Database သိုလှောင်မှုအပေါ် အခြေခံ. စိတ်ကြိုက် sessionhandler ဥပမာသည် GC () နည်းလမ်းကိုပိုမိုကောင်းမွန်စေရန်မည်သို့တိုးတက်အောင်လုပ်ရမည်ကိုပြသသည်။
class DbSessionHandler implements SessionHandlerInterface {
protected $db;
public function __construct(PDO $db) {
$this->db = $db;
}
public function open($savePath, $sessionName): bool {
return true;
}
public function close(): bool {
return true;
}
public function read($id): string|false {
$stmt = $this->db->prepare("SELECT data FROM sessions WHERE id = :id AND expires > :now");
$stmt->execute([':id' => $id, ':now' => time()]);
return (string) $stmt->fetchColumn();
}
public function write($id, $data): bool {
$expires = time() + (int)ini_get("session.gc_maxlifetime");
$stmt = $this->db->prepare("
REPLACE INTO sessions (id, data, expires) VALUES (:id, :data, :expires)
");
return $stmt->execute([
':id' => $id,
':data' => $data,
':expires' => $expires,
]);
}
public function destroy($id): bool {
$stmt = $this->db->prepare("DELETE FROM sessions WHERE id = :id");
return $stmt->execute([':id' => $id]);
}
public function gc($max_lifetime): int|false {
$stmt = $this->db->prepare("DELETE FROM sessions WHERE expires < :time");
$stmt->execute([':time' => time()]);
return $stmt->rowCount();
}
}
အထက်ပါအကောင်အထည်ဖော်မှုတွင် GC () နည်းလမ်းသည်သက်တမ်းကုန်ဆုံးသော session မှတ်တမ်းများကိုဒေတာဘေ့စ်မှရှင်းလင်းစွာဖျက်ပစ်လိုက်သည်။ ပုံမှန်ဖြစ်နိုင်ခြေရှိသော GC နှင့်နှိုင်းယှဉ်လျှင်ဤနည်းလမ်းသည်ပိုမိုယုံကြည်စိတ်ချရပြီးပုံမှန်သန့်ရှင်းရေးလုပ်ရန်စနစ်တကျအလုပ်များ (ဥပမာခရိုပိဒီးယား) နှင့်အသုံးပြုနိုင်သည်။
Custom Processor ကိုသင်သတ်မှတ်ပြီးသည်နှင့်၎င်းကိုအောက်ပါနည်းလမ်းများဖြင့်ဖွင့်နိုင်သည်။
$handler = new DbSessionHandler($pdo);
session_set_save_handler($handler, true);
session_start();
Database Cleanup Script သို့မဟုတ် Task Scheduler ကိုအသုံးပြုပါကသင်သည်အလိုအလျောက် GC ကိုပိတ်ရန် session.gc_probility ကို 0 ကို 0 င်နိုင်သည်။
session.gc_probability = 0
ထို့နောက်စီစဉ်ထားသောတာဝန်အတွက်အခါအားလျော်စွာအခါအားလျော်စွာ execute:
$handler->gc(1440); // ဥပမာတစ်ခုချင်းစီ24မိနစ်ပိုင်းအတွင်းစင်ကြယ်ပါ
ဒေတာဘေ့စ်များအပြင် session သိုလှောင်မှုနှင့် GC ယန္တရားများအပြင်ပြန်လည်ထူထောင်ရေးကို အခြေခံ. တည်ဆောက်နိုင်သည်။ ဥပမာအားဖြင့်၎င်းသည် Redis ကိုအသုံးပြုသောအခါ၎င်းသည် CCRIES GC () နည်းလမ်းများမပါဘဲ၎င်း၏ TTL ယန္တရားနှင့်အလိုအလျောက်သက်တမ်းကုန်ဆုံးနိုင်သည်။
$redis->setex("sess_$id", $max_lifetime, $data);
ဥပမာများပိုမိုများပြားရာတွင် https://m66.net/exet/examples/osession -handler ကိုဖတ်ရှုပါ။
SessionHandlerinterface ကို အကောင်အထည်ဖော်ခြင်းအားဖြင့် PHP developer များသည်စွမ်းဆောင်ရည်မြင့်မားသော 0 က်ဘ်အပလီကေးရှင်းများတည်ဆောက်ခြင်းအတွက်အလွန်အရေးကြီးသည်။ ဒေတာဘေ့စ်များ, redis သို့မဟုတ်အခြား middleware, ဆင်ခြင်တုံတရားအသုံးပြုမှု ကို အသုံးပြုသည်ဖြစ်စေ,
သက်ဆိုင်သောတက်(ဂ်)များ:
SessionHandlerInterface