Nasıl PHP parça nesneleri yarattı mı?

3 Cevap php

Bu aptal bir soru biraz olabilir, ama ben bir cepten bir arka plan gelmiyor ve ben hala birkaç kavram ile mücadele gitmeme gibi okuma ve öğrenme ediyorum ancak.

Şu anda PHP 5.3 ile çalışan ve birkaç farklı nesne sınıflarını kullanarak oldukça basit bir giriş desiging ediyorum: Kullanıcı kullanıcıyı tanımlar. Oturum verilerini ve sorguları yapan birisi açtıysa, ve Veritabanı başlar ve korur oturumu.

Benim komut dosyasını çalıştırdığınızda Yani, benim oturum nesne, vb örneği .. burada benim sorunum olsa bulunuyor. Ben sonraki bir sayfadan diğerine taşıdığınızda nasıl o nesne izlenir? Ya da belki daha doğrusu benim soru nasıl PHP siteye giriş başkası değil Girişimle ilgili nesneler mayın olduğunu biliyor ve geliyor?

Ben olmayan bir cepten bir şekilde bu yapıyorum, ben sadece her sayfada oturum çerezi kontrol ve benim veri beynim o işleyebilir gayet bu şekilde, kontrol ediyorum biliyorum. Ama, nerede ve nasıl izlenir nesne veridir.

EG: On each page I want to check if someone is logged in I reference $session->is_logged_in() etc is_logged_in checks the a private variable name is true or false. There's no checking of cookies at this point which means this object still exists, and, as it keeps asking for a stored variable the instance must persist to be useful... but how does PHP, the server, whatever tie that instance of that object to that user? If all of these objects float around on the server till I destroy them won't there be lots of memory used by objects?

Ben muhtemelen gerçekten temel, fundatmental soru başında dedi ama bu benim eureka an henüz değilim, ben geri basit PHP gidebilir.

3 Cevap

Oturum verileri (yani $ _SESSION tüm veriler) varsayılan seri ve istekler arasında dosya saklanır gereğidir. Session_start () çağrıldığında veriler otomatik olarak dizgilenmemiş alır.

PHP manual on Session Handling (vurgu mayın) Gönderen:

Oturum desteği, istekler arasında korunacak değişkenlerin keyfi numaralarını kaydetmek için izin verir. Bir ziyaretçi sitenize eriştiğinde, PHP (session.auto_start 1 ayarlanmış ise) otomatik olarak kontrol edin ya da istek üzerine bir özel oturum kimliği isteğiyle gönderilen olup olmadığını () (açıkça aracılığıyla session_start () veya dolaylı session_register yoluyla). Bu durumda ise, önceden kaydedilen ortam recreated.

Hiçbir istekleri arasında bellekte kalıcıdır. PHP adanmış önbellek mekanizmaları kullanarak sürece tüm nesneleri, yeniden her istek üzerine yeniden anlam, paylaşılan bir şey mimariye sahiptir.

So when my script is run, my session object is instantiated, etc... here's my problem though. When I move from one page to the next how is that object tracked? Or perhaps rather my question is how does PHP know the objects that relate to my login are mine and not someone else who logged into the site?

Bir oturumu başlattığınızda, bir kimlik oluşturulur. Tüm oturum verileri bu kimliği ile ilişkilendirilmiş ve bir çerez saklamak için tarayıcıya verilir. Daha sonraki istekleri çerez bu kimliği içerir ve PHP yerden dışarı veri çeker it has stored it.

Ben yok kadar bu nesnelerin tüm sunucu üzerinde yüzer varsa onları orada nesneler tarafından kullanılan bellek çok olmayacak?

Nesneler yerine RAM tutuluyor daha dosyalarına tefrika edilir ve oturum sona ile temizlenir.

Ben gerçekten "happening" whats olarak perspektif kaybetmeye başladığınızda, bazen, phpinfo();, ya da sadece bazı ENV değişkenleri oturum ile bir sayfaya hızlı bir gezi genellikle şeyleri temizler ve tekrar beni koyar bulabilirsiniz izlemek ...

Globals ortamınızda "var", ve sen "birlikte çalışma" konum ne bir zihinsel restocking çekmek için izin ve en iyi nasıl meydan saldırmak için .. Sen bilgi hazinesi bulacaksınız, ve tam olarak ne görelim özel "konular" gibi gibi kayıtlar vardır ...

$_SERVER["HTTP_COOKIE"]
$_SERVER["QUERY_STRING"]
$_SERVER["argv | c"]
$include_path

vb ...

"ne onun tüm hakkında" size hatırlatmak için - ayrıca, bu /etc/php.ini PHP'nin internals ile küçük bir tek-bir-zaman (her yerde durum olabilir) üzerinden okumak için asla acıyor.