(PHP 5 >= 5.4.0, PHP 7, PHP 8)
SessionHandlerInterface özel bir oturum işleyici oluşturmak için gerekenlerin en azını tanımlayan bir arayüzdür. Özel oturum işleyicinin session_set_save_handler() işlevine aktarımı sırasında kullanılan sınıf bu arayüzü gerçekleyebilir.
Bu arayüzün geriçağırım yöntemlerinin PHP tarafından dahili olarak çağrılmak üzere tasarlandığı, kullanıcı tarafından kod içinde kullanılmak üzere tasarlanmadığı unutulmamalıdır.
Örnek 1 - SessionHandlerInterface kullanım örneği
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.
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