(PHP 4, PHP 5)
session_set_save_handler — Kullanıcı seviyesi oturum saklama işlevlerini bildirir
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.
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.
Bu işlev, sınıflardaki yıkıcılar gibi çalışır ve oturum işlemleri bittiğinde çalıştırılır.
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.
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.
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 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.