PHP ၏ Session စီမံခန့်ခွဲမှုသည် Web Development ၏အလွန်အရေးကြီးသောအစိတ်အပိုင်းတစ်ခုဖြစ်သည်။ ပုံမှန်အားဖြင့် PHP သည် session data session data များသိုလှောင်ရန်ဖိုင်များကိုအသုံးပြုသည်။ အချို့ဖြစ်ရပ်များတွင် developer များသည် developer များ, cache systems စသည့်အချက်အလက်များကိုသိမ်းဆည်းလိုပါကဤထုံးစံသိုလှောင်ရေးယန္တရားကိုအကောင်အထည်ဖော်ရန် PHP သည် SessionInface interface ကိုထောက်ပံ့ပေးနိုင်သည်။
SessionInterface ဆိုသည်မှာ PHP ဗားရှင်း 7.4 တွင်စတင်မိတ်ဆက်ခဲ့သော interface တစ်ခုဖြစ်ပြီး developer များကို ID ထုတ်လုပ်မှုနှင့်သိုလှောင်ရေးယန္တရားကိုစိတ်ကြိုက်ပြုပြင်ရန်လွယ်ကူစေရန်ရည်ရွယ်သည်။ ယေဘုယျအားဖြင့်ပြောရလျှင် PHP session တစ်ခု၏ ID ကို PHP မှအလိုအလျောက်ထုတ်ပေးပြီး ဒေါ်လာ _Session ဖြင့်သိမ်းဆည်းထားသည်။ SessionITICTFACE ကို အကောင်အထည်ဖော်ခြင်းအားဖြင့် developer များသည် session IDS ၏ဝယ်ယူမှုနှင့်သိုလှောင်နည်းများကိုစိတ်ကြိုက်ပြုပြင်နိုင်သည်။
အထူးသဖြင့် sessionInterface သည် အဓိကနည်းလမ်းနှစ်မျိုးရှိသည်။
Glain 0 န်ကြီးချုပ် () - လက်ရှိ session ၏ ID ကိုရရှိရန်အသုံးပြုသည်။
SetsessionID (string $ ID) - session ID ကိုသတ်မှတ်ရန်အသုံးပြုသည်။
ဤနည်းလမ်းနှစ်မျိုးကိုအကောင်အထည်ဖော်ခြင်းအားဖြင့် developer များသည် session ID ကိုမည်ကဲ့သို့ထုတ်လုပ်သည်, သိမ်းဆည်းခြင်းနှင့်သိုလှောင်ခြင်းမှဖတ်ရှုနိုင်သည်။
ပုံမှန် session သိုလှောင်ရေးယန္တရားကိုပြောင်းလဲရန်ကျွန်ုပ်တို့သည် sessionhandlerinterface ကို အကောင်အထည်ဖော်ရန်နှင့် သိုလှောင်မှု နည်းလမ်းအသစ်တစ်ခုကိုဖြည့်ဆည်းပေးမည့်စိတ်ကြိုက် session handler အတန်းကိုအကောင်အထည်ဖော်ရန်လိုအပ်သည်။ Session Data ကိုသိမ်းဆည်းရန်ဒေတာဘေ့စ်ကိုမည်သို့အသုံးပြုရမည်ကိုဖော်ပြသည့်ရိုးရှင်းသောဥပမာတစ်ခုဖြစ်သည်။
ပထမ ဦး စွာကျွန်ုပ်တို့သည် sessionhandlerinterface နှင့် sessionsidinterface ကိုအကောင်အထည်ဖော်ရန်အတန်းတစ်ခုဖန်တီးရန်လိုအပ်သည်။ ဤအတန်းကို Session Data ၏သိုလှောင်မှုနှင့်ဝယ်ယူမှုကိုကိုင်တွယ်ရန်အသုံးပြုလိမ့်မည်။
<span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">DatabaseSessionHandler</span></span><span> </span><span><span class="hljs-keyword">implements</span></span><span> </span><span><span class="hljs-title">SessionHandlerInterface</span></span><span>, </span><span><span class="hljs-title">SessionIdInterface</span></span><span>
{
</span><span><span class="hljs-keyword">private</span></span><span> </span><span><span class="hljs-variable">$db</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">$dbConnection</span></span></span><span>)
{
</span><span><span class="hljs-variable language_">$this</span></span><span>->db = </span><span><span class="hljs-variable">$dbConnection</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">open</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$savePath</span></span></span><span>, </span><span><span class="hljs-variable">$sessionName</span></span><span>)
{
</span><span><span class="hljs-comment">// ဤနေရာတွင်သင်ဒေတာဘေ့စ် connection စစ်ဆေးခြင်းနှင့်အခြားစစ်ဆင်ရေးများကိုလုပ်ဆောင်နိုင်သည်</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">true</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">close</span></span><span>(</span><span><span class="hljs-params"></span></span><span>)
{
</span><span><span class="hljs-comment">// ဒေတာဘေ့စ် connection ကိုပိတ်ပါ</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">true</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">read</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$sessionId</span></span></span><span>)
{
</span><span><span class="hljs-comment">// ဒေတာဘေ့စ်မှ session data များကိုဖတ်ပါ</span></span><span>
</span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT session_data FROM sessions WHERE session_id = :session_id"</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable language_">$this</span></span><span>->db-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bindParam</span></span><span>(</span><span><span class="hljs-string">':session_id'</span></span><span>, </span><span><span class="hljs-variable">$sessionId</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetchColumn</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">write</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$sessionId</span></span></span><span>, </span><span><span class="hljs-variable">$sessionData</span></span><span>)
{
</span><span><span class="hljs-comment">// Session Data ကိုဒေတာဘေ့စ်သို့ရေးပါ</span></span><span>
</span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"REPLACE INTO sessions (session_id, session_data) VALUES (:session_id, :session_data)"</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable language_">$this</span></span><span>->db-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bindParam</span></span><span>(</span><span><span class="hljs-string">':session_id'</span></span><span>, </span><span><span class="hljs-variable">$sessionId</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bindParam</span></span><span>(</span><span><span class="hljs-string">':session_data'</span></span><span>, </span><span><span class="hljs-variable">$sessionData</span></span><span>);
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</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">destroy</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$sessionId</span></span></span><span>)
{
</span><span><span class="hljs-comment">// ဒေတာဘေ့စ်တွင် session data ကိုဖျက်ပါ</span></span><span>
</span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"DELETE FROM sessions WHERE session_id = :session_id"</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable language_">$this</span></span><span>->db-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bindParam</span></span><span>(</span><span><span class="hljs-string">':session_id'</span></span><span>, </span><span><span class="hljs-variable">$sessionId</span></span><span>);
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</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">gc</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$maxlifetime</span></span></span><span>)
{
</span><span><span class="hljs-comment">// သက်တမ်းကုန်ဆုံးအစည်းအဝေးများ</span></span><span>
</span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"DELETE FROM sessions WHERE last_access < :maxlifetime"</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable language_">$this</span></span><span>->db-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bindParam</span></span><span>(</span><span><span class="hljs-string">':maxlifetime'</span></span><span>, </span><span><span class="hljs-variable">$maxlifetime</span></span><span>);
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
}
</span><span><span class="hljs-comment">// ပြီးမေြာက်စေ SessionIdInterface interface နည်းလမ်း</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">getSessionId</span></span><span>(</span><span><span class="hljs-params"></span></span><span>)
{
</span><span><span class="hljs-comment">// စိတ်ကြိုက်ဝင်ရောက်ခြင်း Session ID လမ်း</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">session_id</span></span><span>(); </span><span><span class="hljs-comment">// သို့မဟုတ်ထုံးစံ logic မျိုးဆက် ID</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">setSessionId</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$id</span></span></span><span>)
{
</span><span><span class="hljs-comment">// စိတ်ကြိုက်ချိန်ညှိချက်များ Session ID လမ်း</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_id</span></span><span>(</span><span><span class="hljs-variable">$id</span></span><span>); </span><span><span class="hljs-comment">// သို့မဟုတ်စိတ်ကြိုက်ယုတ္တိဗေဒသိမ်းဆည်းပါ ID</span></span><span>
}
}
</span></span>
PHP တွင်ကျွန်ုပ်တို့သည် session_set_save_handler () function ကို ဖြတ်. စိတ်ကြိုက် session processor ကိုမှတ်ပုံတင်ရန်လိုအပ်သည်။ ဤနည်းအားဖြင့် PHP သည်အစည်းအဝေးများသိုလှောင်မှုနှင့်စာဖတ်ခြင်းကိုကိုင်တွယ်ရန်ကျွန်ုပ်တို့၏ထုံးစံအတန်းများကိုအသုံးပြုလိမ့်မည်။
<span><span><span class="hljs-comment">// ယူဆချက် $dbConnection ၎င်းသည်ထိရောက်သောဖြစ်သည် PDO ဒေတာဘေ့စ်ဆက်သွယ်မှုအရာဝတ်ထု</span></span><span>
</span><span><span class="hljs-variable">$handler</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DatabaseSessionHandler</span></span><span>(</span><span><span class="hljs-variable">$dbConnection</span></span><span>);
</span><span><span class="hljs-comment">// စိတ်ကြိုက် session processor ကိုမှတ်ပုံတင်ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_set_save_handler</span></span><span>(
[</span><span><span class="hljs-variable">$handler</span></span><span>, </span><span><span class="hljs-string">'open'</span></span><span>],
[</span><span><span class="hljs-variable">$handler</span></span><span>, </span><span><span class="hljs-string">'close'</span></span><span>],
[</span><span><span class="hljs-variable">$handler</span></span><span>, </span><span><span class="hljs-string">'read'</span></span><span>],
[</span><span><span class="hljs-variable">$handler</span></span><span>, </span><span><span class="hljs-string">'write'</span></span><span>],
[</span><span><span class="hljs-variable">$handler</span></span><span>, </span><span><span class="hljs-string">'destroy'</span></span><span>],
[</span><span><span class="hljs-variable">$handler</span></span><span>, </span><span><span class="hljs-string">'gc'</span></span><span>]
);
</span><span><span class="hljs-comment">// session တစ်ခုစတင်ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();
</span></span>
ယခု PHP session data ကို default file system အစားဒေတာဘေ့စ်တွင်သိမ်းဆည်းထားသည်။ session data ကိုရယူရန် $ _Session variable ကိုသုံးနိုင်သည်။
<span><span><span class="hljs-comment">// Session Data ကိုသတ်မှတ်ပါ</span></span><span>
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user'</span></span><span>] = </span><span><span class="hljs-string">'John Doe'</span></span><span>;
</span><span><span class="hljs-comment">// session data ကိုရယူပါ</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user'</span></span><span>]; </span><span><span class="hljs-comment">// ထုတ်လုပ်ခြင်း John Doe</span></span><span>
</span></span>
SessionItinface နှင့် sessionshandlerinterface interface များကိုအကောင်အထည်ဖော်ခြင်းအားဖြင့် developer များသည် PHP ၏ session သိုလှောင်မှုယန္တရားကိုပြောင်းလွယ်ပြင်လွယ်ပြုတ်ကျနိုင်သည်။ ဒေတာဘေ့စ်တစ်ခုသို့မဟုတ် cache system တွင်သိုလှောင်ထားသည့် Metro Session Management သည်ပိုမိုထိရောက်စွာပြောင်းလွယ်ပြင်လွယ်ရှိနိုင်သည်။ တစ်ချိန်တည်းမှာပင်၎င်းသည်စနစ်၏စကေးနိုင်မှုကိုတိုးတက်စေသည်။ မတူညီသော application တစ်ခုနှင့်လိုက်လျောညီထွေဖြစ်အောင်ပြုလုပ်နိုင်သည်။
session သိုလှောင်မှုနည်းလမ်းကိုစိတ်ကြိုက်ပြုလုပ်နိုင်ခြင်းအားဖြင့် Session Data သိုလှောင်မှုတည်နေရာကိုသင်ထိန်းချုပ်နိုင်ခြင်းမရှိပါ။