PHP kézikönyv
Előző
Következő
A PHP munkamenet kezelése lehetővé teszi adatok megőrzését az egymást követő oldal lekérdezések között.
Ez képessé tesz még testreszabhatóbb oldalak készítésére.
Ha ismered a PHPLIB munkamenet kezelését, sok hasonlóságot fogsz felfedezni a PHP munkamenet kezelő függvényeit illetően.
Minden webhelyedre látogató egy-egy egyedi azonosítót kap, az úgynevezett munkamenet azonosítót (session azonosítót).
Ez vagy egy sütiben (cookie) tárolódik a látogató gépén, vagy az URL-ben közlekedik oldalról oldalra.
A munkamenet támogatás lehetővé teszi tetszőleges számú változó megőrzését a PHP oldal lekérdezések között.
Ha egy látogató érkezik webhelyedre, háromféleképpen kezdődhet el, vagy folytatódhat a munkamenete.
Mindhárom esetben a PHP egy munkamenet azonosító érkezését várja.
Ha nem érkezik, új munkamenetet indít.
Ha a session.auto_start be van kapcsolva, a PHP automatikusan megkezdni / folytatja a munkamenetet.
Ha ez nincs bekapcsolva, akkor közvetlenül a session_start() függvénnyel, vagy közvetve a session_register() függvénnyel tudod a munkamenetet folytatni / megkezdeni.
Ha egy érvényes azonosító érkezett, a korábban beállított munkamenet környezet visszaállításra kerül.
Minden a munkamenethez rendelt változó szerializálódik a PHP oldal futásának befejeződésekor.
A nem definiált, de munkamenethez rendelt változók a későbbi folytatásokban nem jönnek újból létre.
A track_vars és register_globals ini beállítások befolyásolják a munkamenet változók tárolásának és visszaállításának módját.
Megjegyzés:
A PHP 4.0.3 verziótól kezdve a track_vars mindig be van kapcsolva, kikapcsolására nincs mód.
Megjegyzés:
A 4.1.0 verziótól kezdve a $_SESSION szuperglobális változó rendelkezésre áll, csakúgy mint a $_POST, $_GET, $_REQUEST és így tovább.
A $HTTP_SESSION_VARS változótól eltérően a $_SESSION mindig elérhető (szuperglobális).
Ezért a global kulcsszóval nem szabad egyűtt használni a $_SESSION változót.
Ha a track_vars be van kapcsolva, és a register_globals ki van kapcsolva, csak a $HTTP_SESSION_VARS asszociatív tömb elemei a munkamenet változók.
A visszaállított munkamenet változók is csak a $HTTP_SESSION_VARS tömbben lesznek megtalálhatóak.
Példa 1.
Változó bejegyzése a munkamenetbe a track_vars bekapcsolt állapotában.
?php if (isset($HTTP_SESSION_VARS['szamlalo'])) {$HTTP_SESSION_VARS['szamlalo']++;} else {$HTTP_SESSION_VARS['szamlalo'] = 0;}?
A $_SESSION változó használata (vagy a $HTTP_SESSION_VARS változó használata PHP 4.0.6 vagy régebbi verzió esetén) javasolt biztonsági és olvashatósági szempontok miatt.
A $_SESSION vagy $HTTP_SESSION_VARS használatával nincs szükség a session_register() / session_unregister() / session_is_registered() függvényekre.
A programozók éppen úgy dolgozhatnak a munkamenet változókkal, mint a "normális" változókkal.
Példa 2.
Változó bejegyzése a munkamenetbe a $_SESSION tömbbel.
?php / / Használd a $HTTP_SESSION_VARS tömböt PHP 4.0.6 vagy régebbi verzióban if (!isset($_SESSION['szamlalo'])) {$_SESSION['szamlalo'] = 0;} else {$_SESSION['szamlalo']++;}?
Példa 3.
Változó bejegyzés törlése a $_SESSION tömbbel.
?php / / Használd a $HTTP_SESSION_VARS tömböt PHP 4.0.6 vagy régebbi verzióban unset( $_SESSION['szamlalo']);?
Ha a register_globals be van kapcsolva, akkor minden globális változó lehet munkamenet változóként regisztrálva, és a munkamenet későbbi folytatásaiban is létre fognak jönni globális változókként a bejegyzett változók.
Mivel ebben az esetben a PHP-nek tudnia kell, hogy mely globális változók bejegyzett munkamenet változók is egyben, a programozónak a session_register() függvényt kell használnia.
Emlékeztetőként a $HTTP_SESSION_VARS / $_SESSION tömbök használatakor nincs szükség a session_register() függvényre.
Figyelem
Ha a $HTTP_SESSION_VARS / $_SESSION tömböt használod és kikapcsolod a register_globals beállítást, ne használd a session_register(), session_is_registered() és session_unregister() függvényeket.
Ha bekapcsolod a register_globals beállítást, a session_unregister() függvényt kell használnod, mivel a munkamenet változók globális változókban jelennek meg.
A register_globals kikapcsolása javasolt mind biztonsági, mind teljesítmény szempontokból.
Példa 4.
Változó bejegyzése a register_globals bekapcsolt állapota mellett.
?php if (!session_is_registered('szamlalo')) {session_register("szamlalo"); $szamlalo = 0;} else {$szamlalo++;}?
Ha mind a track_vars, mind a register_globals beállítások be vannak kapcsolva, a globális változók és a $HTTP_SESSION_VARS / $_SESSION tömbök elemei ugynazokra az értékekre fognak mutatni a már bejegyzett változókat illetően.
Ha a programozó a session_register() függvényt használja munkamenet változók bejegyzésére, akkor ebben az esetben a $HTTP_SESSION_VARS / $_SESSION tömbökben nem fog megjelenni ez a változó a következő munkamenet folytatása előtt (azaz a következő PHP program futás előtt).
Kétféleképpen "közlekedhet" a munkamenet azonosító:
Süti formájában
URL / űrlap paraméterben
A munkamenetkezelő modul mindkét formát támogatja.
A sütik optimálisak, de sajnos nem megbízhatóak (sokan nem fogadják a sütiket), ezért nem lehet rájuk biztonsággal építeni.
A második módszer az azonosítót közvetlenül az URL-ekbe és űrlapokba helyezi.
A PHP képes ezutóbbi azonosító terjesztést átlátszóan végezni, ha az --enable-trans-sid A PHP képes ezutóbbi azonosító terjesztést átlátszóan végezni, ha az --enable-trans-sid opcióval fodítottad.
Ha ezt az opciót bekapcsolod, a reltív URL-ekhez és űrlapokhoz automatikusan hozzáteszi a PHP a munkamenet azonosítót.
Alternatív módszerként használhatod a SID konstanst, ami definiált, ha a kliens nem küldte vissza a megfelelő sütit.
A SID vagy session_name=session_id (munkamenet név, munkamenet azonosító) formátumú, vagy egy üres karektersorozat.
A következő példa egy változó bejegyzést, és egy következő oldalra mutató link készítését mutatja,
Példa 5.
Egy látogató által lehívott oldalak számlálása
?php if (!session_is_registered('szamlalo')) {session_register('szamlalo'); $szamlalo = 1;} else {$szamlalo++;}?
Üdv látogató, eddig ?php echo $szamlalo;? alkalommal láttad ezt az oldalt. p ?php # Az ?php echo SID? szükséges, hogy a munkamenet azonosítót # megőrizzük abban az esetben is, ha a látogató nem fogadja # a sütit. (?=SID? használható, ha a rövid tagek engedélyezettek)?
A továbblépéshez A HREF=" kovoldal.php? ?php echo SID? "kattints ide / A.
A ?=SID? nem szükséges, ha az --enable-trans-sid opcióval fordítottad a PHP-t.
Megjegyzés:
A nem relatív hivatkozások feltételezetten külső oldalakra mutatnak, ezért nem egészülnek ki automatikusan a SID-el.
Komoly biztonsági problémákat okozna, ha a SID-ek elkerülnének egy másik kiszolgálóhoz.
A munkamenethez tartozó adatok állományokban tárolódnak.
Ha adatbázisban, vagy más tároló eszközön szeretnéd rögzíteni a munkamenethez tartozó adatokat, a session_set_save_handler() függvényt kell használnod a saját tároló függvényeid bejegyzéséhez.
A munkamenet kezelő függvények számos beállítási lehetőséget biztosítanak, amiket a php.ini állományban helyezhetsz el.
Egy rövid áttekintés következik.
A session.save_handler A session.save_handler beállítás adja meg a használt tárolás kezelőt, ami a munkamenet adatok elmentésére, és visszakeresésére szolgál.
Az alapértéke files.
A session.save_path A session.save_path beállítás az a paraméter, amit a tárolás kezelő megkap.
Ha az alapértelmezett állomány kezelőt használod, ez a munkamenetek tárolására használt ideiglenes állományok könytárának elérési útja.
Alapértelmezése / tmp.
Ha a session.save_path mélysége több mint kettő, az automatikus szemét takarítás nem fog működni.
Figyelem
Ha ezt az értéket egy mindenki által olvasható könyvtárra állítod (mint az alapbeállítású / tmp), akkor a kiszolgálón lévő többi felhasználó el tudja kapni a munkameneteidet a könyvtárban lévő állományok neve és tartalma alapján.
A session.name a munkamenet neve, amit a PHP a süti beállításakor, az URL / űrlap paraméterek felvételekor és a munkamenet folytatásakor használ.
Csak alfanumerikus karaktereket tartalmazhat.
Alapértéke PHPSESSID.
A session.auto_start A session.auto_start beállítás adja meg, hogy a PHP kezdjen-e / folytasson-e minden PHP oldal futattásnál automatikusan munkamenetet.
Alapértéke 0 (kikapcsolt).
A session.cookie_lifetime a beállított süti élettartalmát szabályozza másodpercekben megadva.
A nulla érték azt jelenti, hogy "amíg a böngészőt be nem zárják".
Alapértéke éppen 0.
A session.serialize_handler a szerializáláshoz használt kezelő nevét adja meg.
Jelenleg egy beépített PHP formátum (php néven) és egy WDDX formátum támogatott (wddx néven).
A WDDX formátumhoz szükséges, hogy a WDDX támogatás a PHP-be legyen fordítva.
Lásd WDDX.
Alapértéke a beépített php kezelő.
A session.gc_probability megadja, hogy mekkora valószínűséggel indul el a gc (garbage collection - szemétgyűjtés) az egyes PHP lekérdezésekkor.
Az értéket százalékban kell megadni.
Alapértéke 1.
A session.gc_maxlifetime megadja, hogy hány másodperc elteltével tekinti a szemétgyűtjtő szemétnek, és eltakarítandónak a munkamenet adatokat.
A session.referer_check azt a rész-karaktersorozatot tartalmazza, amit minden HTTP Referer fejlécben keresni szeretnél a munkamenetek még biztonságosabb azonosítása céljából.
Ha a megadott rész-karaktersorozatot nem találja meg a PHP a Refererben, a küldött munkamenet azonosítót nem fogja elfogadni.
Alapértéke az üres karaktersorozat.
A session.entropy_file A session.entropy_file egy elérési utat határoz meg ahhoz az "állományhoz", amit a PHP külső entrópia forrásnak használ a munkamenet azonosító előállításakor.
Ez lehet például / dev / random vagy / dev / urandom.
Ezek sok Unix rendszeren elérhetőek.
A session.entropy_length az olvasott byte-ok számát adja meg, amennyit a fent említett állományból olvas a PHP.
Alapértéke 0 (kikapcsolt).
A session.use_cookies határozza meg, hogy a PHP használ-e sütiket a munkamenet azonosító tárolására a kliens oldalon.
Alapértéke 1 (engedélyezett).
A session.cookie_path A session.cookie_path azt az elérési utat határozza meg, amit a munkamenet sütiben beállít a PHP.
Alapértéke /.
A session.cookie_domain A session.cookie_domain azt a domain értéket határozza meg, amit a PHP a munkamenet sütiben beállít.
Alapértéke semmi.
A session.cache_limiter A session.cache_limiter azt a cache metódust határozza meg, amit a munkamenet oldalakra alkalmazni kell.
Lehetséges értékei: none, nocache, private, private_no_expire és public.
Alapértéke nocache.
A session.cache_expire A session.cache_expire megadja, hogy hány percig legyen aktuális a cache-ben egy munkamenetet használó oldal.
Ennek nincs hatása, ha nocache módot választasz.
Alapértéke 180.
A session.use_trans_sid A session.use_trans_sid szabályozza, hogy az átlátszó SID hozzáadás be van-e kapcsolva vagy nincs.
Ehhez szükséges, hogy a --enable-trans-sid Ehhez szükséges, hogy a --enable-trans-sid opcióval fordítsd korábban a PHP-t.
Alapértéke 1 (engedélyezett).
Az url_rewriter.tags Az url_rewriter.tags adja meg, hogy mely HTML elemeket kell átírni, ha a munkamenet azonosítók átlátszó elhelyezése be van kapcsolva.
Alapértéke a=href,area=href,frame=src,input=src,form=fakeentry
Megjegyzés:
A munkamenetek támogatása a PHP 4.0 verzióban jelent meg.
Előző
Tartalom
Következő
Fel