Aşağıdaki örnek, PHP oturumlarının öntanımlı kaydetme işleyici
dosyalarına benzeyen dosya
tabanlı bir oturum
deposu sağlar. Bu örnek, favori PHP destekli veritabanı motorunuzu
kullanarak veritabanı depolamasını kapsayacak şekilde kolayca
genişletilebilir.
Nesne yönelimli prototipi session_set_save_handler()
ile kullandığımızı ve kapanma işlevini işlevin
kapanışı_kaydet
bağımsız değişkenini kullanarak
kaydettiğimizi unutmayın. Bu genellikle nesneleri oturum kaydetme
işleyicileri olarak kaydederken önerilen yoldur.
Dikkat
Kısa olması için bu örnek, giriş doğrulamasını atlar. Bununla birlikte,
$id
bağımsız değişkenleri, yol geçiş sorunları gibi güvenlik
açıklarından kaçınmak için uygun doğrulama/temizleme gerektiren, aslında
kullanıcı tarafından sağlanan değerlerdir. Bu nedenle, bu
örneği üretim ortamlarında gereken değişiklikleri yapmadan kullanmayın
.
<?php
class MySessionHandler implements SessionHandlerInterface
{
private $savePath;
public function open($savePath, $sessionName): bool
{
$this->savePath = $savePath;
if (!is_dir($this->savePath)) {
mkdir($this->savePath, 0777);
}
return true;
}
public function close(): bool
{
return true;
}
#[\ReturnTypeWillChange]
public function read($id)
{
return (string) @file_get_contents("$this->savePath/sess_$id");
}
public function write($id, $data): bool
{
return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
}
public function destroy($id): bool
{
$file = "$this->savePath/sess_$id";
if (file_exists($file)) {
unlink($file);
}
return true;
}
#[\ReturnTypeWillChange]
public function gc($maxlifetime)
{
foreach (glob("$this->savePath/sess_*") as $file) {
if (filemtime($file) + $maxlifetime < time() && file_exists($file)) {
unlink($file);
}
}
return true;
}
}
$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();
// $_SESSION'daki anahtarla değerleri atamaya ve almaya devam et