array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'tr', ), 'this' => array ( 0 => 'function.session-set-save-handler.php', 1 => 'session_set_save_handler', ), 'up' => array ( 0 => 'ref.session.php', 1 => 'Oturum İşlevleri', ), 'prev' => array ( 0 => 'function.session-set-cookie-params.php', 1 => 'session_set_cookie_params', ), 'next' => array ( 0 => 'function.session-start.php', 1 => 'session_start', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'tr', 'path' => 'reference/session/functions/session-set-save-handler.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(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ş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.
open
Bir 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.
close
Bir 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.
read
Bir 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.
write
Bir 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.
destroy
Bir 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.
gc
Bir 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_sid
Bir 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_sid
Bir 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_timestamp
Bir 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.