2012-06-17 11 views
6

PHP'nin belirli bir oturumun zaman aşımına uğradığını nasıl algıladığını merak ediyorum.PHP bir oturumun zaman aşımına uğradığını nasıl algılar?

Ayrıntı: Varsayılan oturum ömrü ve benzeri olan varsayılan (dosya tabanlı) oturum işleyicisini kullanıyorum. Php.ini'deki her şey varsayılan olarak açıktır.

Şimdi bir oturum başlatılmışsa, zaman aşımına uğramış oturumlar varsa, PHP bir kontrol (non session.gc_divisor ve session.gc_probability'ye bağlı olarak) yapar. Ancak, PHP'den seanslardan son seansa erişim zamanını kontrol etmek için nereden geliyorsunuz?

Oturum dosyasının kendisi yalnızca iş yükünü içerir, örn. $_SESSION['x'] = 1; için x|i:1;, bu nedenle son oturum erişim süresi hakkında bilgi yok.

Oturum başlatma süreleriyle ilgili bellek içi hiçbir bilginin olmadığını, oturumların tam bir sunucu yeniden başlatıldıktan sonra da çalışmaya devam ettiğini düşünüyorum.

Peki, PHP bu bilgileri nereden alıyor? Seans dosyasının mtime/ctime ile mi karşılaştırılıyor?

cevap

8

PHP'nin varsayılan oturum işleyicisi session.save_path tarafından belirtilen dizinde serialize() kullanarak bir dosyada $ _SESSION verilerini depolar. Genellikle dosya adı $filename = 'sess_' . session_id() gibi bir şey görünüyor.

Sadece bir dosya olduğu için PHP, hangi oturum dosyalarının eski olduğunu belirlemek için dosyanın m zamanını (son değişiklik zamanını) kullanabilir. Temel olarak, mtime değeri, session.gc_maxlifetime değerini ve unlink() değerini aşan tüm oturum dosyalarını yakalar. Söylediğiniz gibi, temizleme meydana gelme olasılığı session.gc_* ini değişkenleri tarafından yönetilmektedir.

Şimdi, kendi oturum işleyicilerinizi session_set_save_handler() ile oluşturuyorsanız, bu işlem pencerenin dışına taşınır ve oturumların nasıl depolandığı ve temizlendiği konusunda denetiminiz vardır, ancak bu varsayılan davranışı açıklar.

+0

Hey, cevabınız için teşekkürler. "PHP'nin dosyayı kullanabileceğini" yazdın. Bunun PHP'nin varsayılan dosya tabanlı oturum işleyicisiyle çalışma şekli olduğuna eminim, fakat bununla ilgili herhangi bir resmi açıklama var mı? – hacksteak25

+1

Hayır, ama emin olmak için her zaman php kaynağını kontrol edebilirsiniz. 'Son kullanım süresi', oturum verilerinin kendisinde kodlanmadığından, oturum dosyasının m zamanlaması, bu bilgilerin mevcut olduğu diğer tek yerdir. PHP, başka bir yerde mtimes veritabanını korumaz - eğer yaparsa, bu verinin nerede saklanacağını/belirleyeceğini belirtmek için yapılandırma seçenekleri olacaktır. –

+0

, kaynaklara bakmaktan daha kolay bir yol olacağını umuyordu;) Ama haklısın. Mtimes için bir seçenek yok, bu yüzden dosyanın mtime'ından başka bir şey yok gibi görünüyor. Teşekkürler. – hacksteak25

İlgili konular