session_set_save_handler

(PHP 4, PHP 5, PHP 7, PHP 8)

session_set_save_handlerKullanıcı seviyesi oturum saklama işlevlerini bildirir

Açıklama

session_set_save_handler(
    callable$open,
    callable$close,
    callable$read,
    callable$write,
    callable$destroy,
    callable$gc,
    callable$create_sid = ?,
    callable$validate_sid = ?,
    callable$update_timestamp = ?
): bool

Aşağıdaki sözdizimi kullanılabilir:

session_set_save_handler(object$oturum_işleyici, bool$kapanışı_kaydet = true): bool

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.

Bağımsız Değişkenler

Bu işlevin iki sözdizimi vardır. İkincisinin bağımsız değişkenleri:

oturum_işleyici

Oturum 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ışı_kaydet

session_write_close() işlevi register_shutdown_function() işlevi olarak kaydedilir.

Birincisinin bağımsız değişkenleri:
open

Bir geriçağırım işlevi olup sözdizimi şöyle olabilir:

open(string$kayıtYolu, string$oturumAdı): bool

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.

close

Bir geriçağırım işlevi olup sözdizimi şöyle olabilir:

close(): bool

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.

read

Bir geriçağırım işlevi olup sözdizimi şöyle olabilir:

read(string$oturum_kimliği): string

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.

write

Bir geriçağırım işlevi olup sözdizimi şöyle olabilir:

write(string$oturum_kimliği, string$veri): bool

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.

destroy

Bir geriçağırım işlevi olup sözdizimi şöyle olabilir:

destroy(string$oturum_kimliği): bool

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.

gc

Bir geriçağırım işlevi olup sözdizimi şöyle olabilir:

gc(int$ömür): bool

Çö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_sid

Bir geriçağırım işlevi olup sözdizimi şöyle olabilir:

create_sid(): string

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_sid

Bir geriçağırım işlevi olup sözdizimi şöyle olabilir:

validate_sid(string$anahtar): bool

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_timestamp

Bir geriçağırım işlevi olup sözdizimi şöyle olabilir:

update_timestamp(string$anahtar, string$değer): bool

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.

Dönen Değerler

Başarı durumunda true, başarısızlık durumunda false döner.

Örnekler

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

Notlar

Uyarı

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.

Uyarı

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.

Ayrıca Bakınız

To Top