SessionHandlerInterface arayüzü

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

Giriş

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.

Arayüz Sözdizimi

interfaceSessionHandlerInterface {
publicclose(): bool
publicdestroy(string$kimlik): bool
publicgc(int$azami_ömür): int|false
publicopen(string$yol, string$isim): bool
publicread(string$kimlik): string|false
publicwrite(string$kimlik, string$veri): bool
}

Ö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.

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

İçindekiler

To Top