(PHP 4, PHP 5, PHP 7, PHP 8)
session_set_save_handler — Kullanıcı seviyesi oturum saklama işlevlerini bildirir
$open,$close,$read,$write,$destroy,$gc,$create_sid = ?,$validate_sid = ?,$update_timestamp = ?Aşağıdaki sözdizimi kullanılabilir:
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şlevin iki sözdizimi vardır. İkincisinin bağımsız değişkenleri:
oturum_işleyiciOturum işleyici olarak kaydedilmek üzere, SessionHandlerInterface ve seçimlik olarak SessionIdInterface ve/veya SessionUpdateTimestampHandlerInterface gerçekleyen SessionHandler gibi bir sınıfın örneği.
kapanışı_kaydetsession_write_close() işlevi register_shutdown_function() işlevi olarak kaydedilir.
openBir geriçağırım işlevi olup sözdizimi şöyle olabilir:
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 bağımsız değişken kabul edeceği varsayılır.
İlkinde dosyaların kaydedileceği yerin yolu, ikincisinde oturum ismi
verilir. Oturum başlatıldığında otomatik olarak veya elle
session_start() çağırarak çalıştırılan ilk
geriçağırım işlevidir. Başarı durumunda true yoksa false döner.
closeBir geriçağırım işlevi olup sözdizimi şöyle olabilir:
Bu işlev, sınıflardaki yıkıcılar gibidir ve write geriçağırım işlevinden
sonra çalıştırılır. Ayrıca, session_write_close()
çağrıldığında da çalıştırılır.
Başarı durumunda true yoksa false döner.
readBir geriçağırım işlevi olup sözdizimi şöyle olabilir:
read geriçağırımı daima dizgeleştirilmiş bir
oturum dizgesi veya hiç veri okunmamışsa boş dizge döndürmelidir.
Bu geriçağırım, PHP tarafından dahili olarak oturum başlarken veya
session_start() çağrısıyla çalıştırılır. Bu
geriçağırımı çağırmadan önce PHP open
geriçağırımını çalıştırır.
Bu geriçağırımdam dönen dizgeleştirilmiş biçim, değiştirilmeden
write geriçağırımına aktarılabilecek biçimde
olmalıdır. Dönen değer PHP tarafından otomatik olarak nesneleştirilerek
$_SESSION dizisini doldurmakta kullanılır. Veri,
serialize() işlevindekine benzese de session.serialize_handler
ini değişkeninde belirtilen biçimde olacağı unutulmamalıdır.
writeBir geriçağırım işlevi olup sözdizimi şöyle olabilir:
write geriçağırımı oturumun kaydedilip
kapatılması gerekince çağrılır. Geriçağırım geçerli oturum kimliğini
ve $_SESSION dizisinin dizgeleştirilmiş sürümünü
bağımsız değişken olarak alır. PHP tarafından dahili olarak kullanılan
dizgeleştirme yöntemi, session.serialize_handler
ini değişkeninde belirtilmiştir.
Bu geriçağırıma aktarılan dizgeleştirilmiş oturum saklama verisi,
kimliği aktarılan oturumla ilgili olmalıdır. Bu veri alındığında
read geriçağırımının döndürdüğü değer,
write geriçağırımına değiştirilmeden aktarılacak
biçimde olmalıdır.
Bu geriçağırım PHP kapanırken veya doğrudan
session_write_close() çağrıldığında çalıştırılır.
Bu işlev çalıştırıldıktan sonra PHP dahili olarak
close geriçağırımını çalıştırı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.
destroyBir geriçağırım işlevi olup sözdizimi şöyle olabilir:
Bu işlev, oturum kimliğini tek bağımsız değişken olarak alır.
session_regenerate_id() işlevi eski_oturumu_sil
bağımsız değişkenine true atanarak çağrıldığında veya
session_destroy() ile oturum yok edildiğinde bu
geriçağırım çalıştırılır. Başarı durumunda true yoksa false döner.
gcBir geriçağırım işlevi olup sözdizimi şöyle olabilir:
Çöp toplayıcı geriçağırım işlevi olup, eski oturum verilerini
temizlemek için dahili olarak PHP tarafından düzenli aralıklarla
çağrılır. Sıklık
session.gc_probability
ve session.gc_divisor
yönergeleri ile ayarlanır. İşleve aktarılan ömür değeri session.gc_maxlifetime
yönergesinin çalışma zamanı değerini değiştirir.
Başarı durumunda true yoksa false döner.
create_sidBir geriçağırım işlevi olup sözdizimi şöyle olabilir:
Bu geriçağırım yeni bir oturum kimliği gerektiğinde çalıştırılır. Bağımsız değişkensizdir ve dönüş değeri dizge olarak geçerli bir oturum kimliği olmalıdır.
validate_sidBir geriçağırım işlevi olup sözdizimi şöyle olabilir:
Bir oturum başlatılıp bir oturum kimliği edinildiğinde session.use_strict_mode
yönergesi de etkinse bu geriçağırım çalıştırılır.
anahtar doğrulanacak oturum kimliğidir. Bu
kimliğe sahip bir oturum varsa bu oturum kimliği geçerlidir.
Başarı durumunda true yoksa false döner.
update_timestampBir geriçağırım işlevi olup sözdizimi şöyle olabilir:
Bir oturum güncellendiğinde bu geriçağırım çalıştırılır.
anahtar oturumun kimliği,
değer ise oturum verisidir.
Başarı durumunda true yoksa false döner.
Örnek 1 - Özel oturum işleyici
SessionHandlerInterface sayfasında kodun tamamı vardır. Burada sadece çağrılan kısım gösterilmiştir.
Burada session_set_save_handler() işlevinin NYP sözdizimi kullanılmakta ve kapanışı_kaydet bağımsız değişkeni ile kapanış işlevi kayıt altına alınmaktadır. Nesneleri oturum kayıt işleyicisi olarak kayıt altına alma işlemi genel olarak böyledir ve böyle yapılması önerilir.
<?php
class MySessionHandler implements SessionHandlerInterface
{
// arayüzlerin gerçeklenimi burada
}
$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();
// $_SESSION dizisinden değerleri anahtarlarına göre
// elde etmek ve atamak için kodlar burada.
write ve close eylemcileri
nesne yokedildikten sonra çağrılmaktadır. Bu bakımdan nesneler ve istisna
yavrulama kullanılamaz. İstisnalar da yakalanamaz, ne yakalanır ne de
herhangi bir istisna izi görüntülenir ve çalışma beklenmedik bir şekilde
durur. Ancak nesne yıkıcılar oturumlarda kullanılabilir.
Bu yumurta/tavuk sorununu çözümlemek için bir yıkıcıdan session_write_close() çağrısı yapmak mümkündür fakat en güvenilir yol, kapanış işlevini yukarıda açıklandığı gibi kayıt altına almaktır.
Eğer oturum, betiğin sonlanmasıyla kapanmışsa bazı SAPI'lerde, geçerli çalışma dizini değiştirilir. Böyle durumlarda oturumu önceden session_write_close() ile kapatmak mümkündür.