SessionHandlerInterface arayüzü
SessionHandlerInterface
&reftitle.intro;
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.
&reftitle.interfacesynopsis;
SessionHandlerInterface
&Methods;
&reftitle.examples;
-
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
.
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
]]>
&reference.session.entities.sessionhandlerinterface;