(PHP 4, PHP 5)
session_set_save_handler — Kullanıcı seviyesi oturum saklama işlevlerini bildirir
$aç
, callback $kapa
, callback $oku
, callback $yaz
, callback $yoket
, callback $çöpçü
)session_set_save_handler() işlevi, bir oturumla ilişkili verileri almak ve saklamak için kullanılan kullanıcı seviyesi oturum saklama işlevlerini bildirir. PHP oturumlarında başka kaynaklardan sağlanmış bir saklama yöntemi (oturum verilerini bir yerel veritabanıda saklamak gibi) kullanılacaksa bu işlev çok işe yarar.
aç
Bu işlev, sınıflardaki kurucular gibi çalışır ve oturum açıldığında çalıştırılır. Açma işlevinin iki değiştirge kabul edeceği varsayılır. İlkinde dosyaların kaydedileceği yerin yolu, ikincisinde oturum ismi verilir.
kapa
Bu işlev, sınıflardaki yıkıcılar gibi çalışır ve oturum işlemleri bittiğinde çalıştırılır.
oku
Oturum bilgilerinin kayıt eylemcisinin beklendiği gibi çalışması için
bu işlevin daima dizge değer döndürmesi gerekir. Okunacak veri yoksa
işlev boş dizge döndürmelidir. Diğer eylemcilerden dönen değerler
başarı durumunda TRUE
başarısızlık durumunda FALSE
döndüren
mantıksal ifadelere dönüştürülür.
yaz
Bilginize:
Bu işlev çıktı akımı kapanana kadar çalıştırılmaz. Bu bakımdan bu işlevdeki hata ayıklama deyimlerinin çıktıları tarayıcıda hiçbir zaman görünmez. Eğer hata ayıklama çıktısı gerekliyse, bu çıktının bir dosyaya yazılması önerilir.
yoket
Bu işlev, oturum kimliğini tek değiştirge olarak alır ve session_destroy() işlevi ile bir oturum yok edildiğinde çalıştırılır.
çöpçü
Çöp toplayıcı işlev. Oturumun azami ömrünü tek değiştirge olarak alır ve oturumun çöp toplayıcısı çalıştırıldığı zaman çalıştırılır.
Başarı durumunda TRUE
, başarısızlık durumunda FALSE
döner.
Örnek 1 - session_set_save_handler() örneği
Aşağıdaki örnekte, PHP'nin öntanımlı kayıt ortamı olan dosyalara
(files
) benzer dosya temelli bir oturum kayıt
ortamı oluşturulmaktadır. Bu örnek, PHP destekli veritabanı mekanizmanızı
kapsayacak şekilde kolayca genişletilebilir.
<?php
function aç($saklama_yeri, $oturum_ismi)
{
global $oturum_kayıt_yeri;
$oturum_kayıt_yeri = $saklama_yeri;
return(true);
}
function kapat()
{
return(true);
}
function oku($id)
{
global $oturum_kayıt_yeri;
$saklama_dosyası = "$oturum_kayıt_yeri/oturum_$id";
return (string) @file_get_contents($saklama_dosyası);
}
function yaz($id, $saklama_verisi)
{
global $oturum_kayıt_yeri;
$saklama_dosyası = "$oturum_kayıt_yeri/oturum_$id";
if ($fp = @fopen($saklama_dosyası, "w")) {
$return = fwrite($fp, $saklama_verisi);
fclose($fp);
return $return;
} else {
return(false);
}
}
function yoket($id)
{
global $oturum_kayıt_yeri;
$saklama_dosyası = "$oturum_kayıt_yeri/oturum_$id";
return(@unlink($saklama_dosyası));
}
function çöpçü($azami_ömür)
{
global $oturum_kayıt_yeri;
foreach (glob("$oturum_kayıt_yeri/oturum_*") as $dosya) {
if (filemtime($dosya) + $azami_ömür < time()) {
@unlink($dosya);
}
}
return true;
}
session_set_save_handler("aç", "kapat", "oku", "yaz", "yoket", "çöpçü");
session_start();
// Oturum ile ilgili diğer işlemler
?>
PHP 5.0.5'ten itibaren yaz
ve
kapat
eylemcileri nesne yokedildikten sonra
çağrılmaktadır. Bu bakımdan nesneler ve oluşturulan istisnalar
kullanılamaz. Ancak nesne yıkıcılar oturumları kullanabilir.
Bu yumurta/tavuk sorununu çözümlemek için bir yıkıcıdan session_write_close() çağrısı yapmak mümkündür.
Eğer oturum, betiğin sonlanmasıyla kapanmışsa bazı SAPI'lerde geçirli çalışma dizini değiştirilir. Böyle durumlarda oturumu önceden session_write_close() ile kapatmak mümkündür.