လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP Session Data ၏အမှိုက်သရိုက်များသန့်ရှင်းရေးလုပ်ငန်းစဉ်ကိုအကောင်းဆုံး sessionhanderinlerinterface ကိုအသုံးပြုနည်း --: GC function ကိုအသုံးပြုနည်း။

PHP Session Data ၏အမှိုက်သရိုက်များသန့်ရှင်းရေးလုပ်ငန်းစဉ်ကိုအကောင်းဆုံး sessionhanderinlerinterface ကိုအသုံးပြုနည်း --: GC function ကိုအသုံးပြုနည်း။

M66 2025-06-22

တစ်ပြိုင်နက်တည်း, ဖြန့်ဖြူးထားသောသို့မဟုတ်ရေရှည် PHP applications များတည်ဆောက်သည့်အခါရိုးရာ File System System Session Session Storage Metessions သည် session spam အချက်အလက်များစုဆောင်းခြင်းကိုဖြစ်ပေါ်စေနိုင်သည်။ ဤပြ problem နာကိုဖြေရှင်းရန် PHP သည် sessionhandlerinterface interface ကိုထောက်ပံ့ပေးပြီး developer များက GC () နည်းလမ်းသည်အမှိုက်သန့်ရှင်းရေးလုပ်ငန်းစဉ်ကိုထိန်းချုပ်ရန်သော့ချက်ဖြစ်သည်။

SessionHandlerinterface ဆိုတာဘာလဲ။ :: 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 ကိုသန့်ရှင်းရေးလုပ်ရန်အတွက်မူဝါဒကိုအကောင်အထည်ဖော်သည့်အခါဤနည်းလမ်းဖြင့်သတ်မှတ်နိုင်သည်။

default default collection စုဆောင်းခြင်းယန္တရားသည်အဘယ်ကြောင့်မတတ်နိုင်သနည်း။

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 ဖြစ်နိုင်ခြေတွင်အစပျိုးသည်ကိုဖော်ပြသည်။ ဤမဟာဗျူဟာသည်အသွားအလာနည်းသောစနစ်များတွင်အသွားအလာနိမ့်စနစ်များတွင်သက်တမ်းကုန်ဆုံးနိုင်ပြီးစွမ်းဆောင်ရည်အပေါ်သက်ရောက်မှုရှိလာနိုင်သည်။

session processor ကိုစိတ်ကြိုက်ပြုလုပ်ပြီး GC ကိုအကောင်းဆုံးလုပ်ပါ

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 နှင့်နှိုင်းယှဉ်လျှင်ဤနည်းလမ်းသည်ပိုမိုယုံကြည်စိတ်ချရပြီးပုံမှန်သန့်ရှင်းရေးလုပ်ရန်စနစ်တကျအလုပ်များ (ဥပမာခရိုပိဒီးယား) နှင့်အသုံးပြုနိုင်သည်။

စိတ်ကြိုက် sessionhandler ကိုအသုံးပြုပြီး PHP ကို ​​configure လုပ်ပါ

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မိနစ်ပိုင်းအတွင်းစင်ကြယ်ပါ

cache ကို cache နှင့်ဖြန့်ဝေသောသိုလှောင်မှုနှင့်အတူစွမ်းဆောင်ရည်ကိုပိုကောင်းအောင်လုပ်ပါ

ဒေတာဘေ့စ်များအပြင် 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, ဆင်ခြင်တုံတရားအသုံးပြုမှု ကို အသုံးပြုသည်ဖြစ်စေ,