Menü
Ingyenes
becsekkolás
a fő  /  Oktatás / Ahol a PHP üléseket tárolják. PHP ülések a szike alatt

Ahol a PHP üléseket tárolják. PHP ülések a szike alatt

Az interneten több ezer oktatóanyagot találhat arról, hogy milyen ülésekre van szükségük, és hogyan kell dolgozni velük. De sajnos, miután elolvasta őket, sok kérdés marad. Véleményem szerint a legegyszerűbb módja annak, hogy kitaláljuk, hogy mindenben megnézzük, hogyan működik az ülések belülről. Azok. Vizsgálja meg a böngésző és a webszerver megosztása naplókat, valamint nézze meg, hogy milyen adatok mentésre kerülnek az ügyfél oldalán és a szerver oldalán.

Ezután sok pillanat sokkal világosabbá válik, és maga a mechanizmus átláthatóbb.

Az üléseket a következő szabványos szkripten fogják tanulmányozni:

Az alábbiak szerint működik:

1. blokk. A Session_Start () funkció új munkamenetet hoz létre, vagy betölti a régi, az egyedülálló PHSESSID munkamenet azonosító használatával.

2. blokk. Ha sikerült visszaállítja az üléseket, a $ _session ["Nézetek"] értéke egyre nő. Ha nem, az inicializálja.

Elméletileg, ha a Cook Support engedélyezve van a böngészőben, a mechanizmusnak meg kell működnie, és minden alkalommal, amikor az oldal frissül, a mérő értéke növekszik.

Első betöltési parancsfájl

Kérjen fejléceket

Get / http / 1.1 Host: SellingRange.Local Felhasználói ügynök: Mozilla / 5.0 (Windows NT 5.1, RV: 6.0.2) Gecko / 20100101 Firefox / 6.0.2 Elfogadás: Szöveg / HTML, Alkalmazás / XHTML + XML, Alkalmazás / Xml; q \u003d 0,9, * / *; q \u003d 0,8 Elfogadás-nyelv: ru-en, ru, q \u003d 0,8, en-us; q \u003d 0,5, en; q \u003d 0,3, EN; q \u003d 0,3 Elfogadás-kódolás: gzip, deflálja az elfogadás-karját : Windows-1251, UTF-8; q \u003d 0,7, *; q \u003d 0.7 Csatlakoztatás: tartás-életben cache-control: max-kor \u003d 0

Fejlécek Válasz

Http / 1.1 200 ok Dátum: Thu, 29 szept. 2011 20:36:15 GMT Szerver: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-POWERED-BY: PHP / 5.2.10 SET-Cookie: PHPSSESSID \u003d K33EN6CCGCIA7125MITJ5TE4U6; PATH \u003d / Lejár: Thu, 1981 november 08:52:00 GMT Cache-Control: No-Store, No-Cache, Must-Revidate, Post-Check \u003d 0, Pre-Check \u003d 0 PRAGMA: NO-Cache Content-Hossz: 58 Keep-Alive: Timeout \u003d 5, max \u003d 100 Csatlakozás: tartandó tartalom típus: szöveg / html

Megjegyzés

A kezdeti kérelemben a böngésző semmilyen módon nem azonosította magát, így a mechanizmust sessions PHP. Új egyedi munkamenet-azonosítót generált, és parancsolta a böngészőt, hogy olyan csomópontot hozzon létre, amelyen ez a nagyon azonosító tárolódik.

Oldalsó szerver

A szerver oldalán lévő szkript eredményeként létrejön a Sess_k33en6CCGCIA7125MITJ5TE4U6 a következő tartalom:

Ügyfél oldal

Az ügyféloldalon a Cook Phpsessid létrehozása, amelyben a munkamenet egyedi azonosítójának értéke tárolódik.

Jegyzet. -Ért pHP beállítások Alapértelmezés szerint a Cook Phpsessid élettartama - amíg a böngésző zárva van. Azok. Amint a böngésző zárva van, a Cook törlődik, és az ülés elvesztése ennek megfelelően elvész. A Cookie Phpsessid élettartama megváltoztatható a session.cookie_lifetime értékének változtatásával.

A szkript munkájának eredménye

Második betöltési forgatókönyv

Kérjen fejléceket

Get / http / 1.1 Host: SellingRange.Local Felhasználói ügynök: Mozilla / 5.0 (Windows NT 5.1, RV: 6.0.2) GECKO / 20100101 Firefox / 6.0.2 Elfogadás: Szöveg / HTML, ALKALMAZÁS / XHTML + XML, ALKALMAZÁS / XML, Q \u003d 0,9, * / *; q \u003d 0,8 Elfogadás-nyelv: ru-en, ru; q \u003d 0,8, en-us; q \u003d 0,5, en; q \u003d 0,3 Elfogadás-kódolás: GZIP, Deflate Elfogadási-Charset: Windows-1251, UTF-8; q \u003d 0,7, *; q \u003d 0,7 Csatlakozás: Keep-Alive Cookie: PHPSSESSID \u003d K33EN6CGCIA7125MITJ5TE4U6 Cache-Control: Max-Age \u003d 0

Fejlécek Válasz

Http / 1.1 200 OK dátum: Thu, 29 szept. 2011 20:49:41 GMT szerver: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-by: PHP / 5.2.10 lejár: Thu, 19 nov 1981 081:52:00 GMT Cache-Control: No-Store, No-Cache, Must-Revidate, Post-Check \u003d 0, Pre-Check \u003d 0 Pragma: No-Cache Content-Length: 58 tartás-életben: Timeout \u003d 5, max \u003d 100 Csatlakozás: tartandó tartalom típus: szöveg / html

Megjegyzés

A böngésző PHPSSESSID COCE WEB SERVER-t küld a PHP használatával a Sess_k33en6CCGCIA7125MITJ5TE4U6 fájl értékeitől. Ennek megfelelően a 2. blokkban működik az IF (egyenes) ágon.

Oldalsó szerver

A szkript művelet eredményeként a Sess_k33en6CCGCIA7125MITJ5TE4U6 fájl tartalma megváltozik:

Ügyfél oldal

Az ügyfél nem változik az ügyfélen.

A szkript munkájának eredménye

Mi a következő lépés?

A böngésző lezárása előtt az oldal későbbi letöltése analógiával fog működni azzal, hogy a szkript második terhelése hogyan működött.

Mivel A Cook élettartama a böngésző aktuális munkamenetére korlátozódott, majd a bezárása után az egyedülálló munkamenet azonosítója elveszik, és az újraindításkor a folyamat új lesz.

Azonban visszatérhet a mentett munkamenethez, ha kifejezetten megadja a Phsessid parancsot a parancsfájl paraméterként:

A munkamenethez való visszatérés meglehetősen feltételes, mert Ebben az esetben a szkript művelet eredményeképpen a szakács nem jön létre. Szerver válasz fejlécek:

Http / 1.1 200 OK dátum: Thu, 29 szept. 2011 21:01:52 GMT Server: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-by: PHP / 5.2.10 lejár: Thu, 19 nov 1981 081:52:00 GMT Cache-Control: No-Store, No-Cache, Must-Revidate, Post-Check \u003d 0, Pre-Check \u003d 0 Pragma: No-Cache Content-Length: 58 tartás-életben: Timeout \u003d 5, max \u003d 100 Csatlakozás: tartandó tartalom típus: szöveg / html

Azok. A munka fenntartása érdekében ez a munkamenet minden olyan linkre vonatkozik, amely a PHPSSESSID \u003d K33EN6CCGCIA7125MITJ5TE4U6.

Jegyzet. Megadhatja a PHP-t úgy, hogy az egyedülálló munkamenet-azonosítót csak a szakácson keresztül továbbítják. Ehhez telepítse a session.use_only_cookies értéket. 1. Ebben az esetben a fent bemutatott trükk nem fog kerülni.

Ha a cookie-k le vannak tiltva a böngészőben, akkor a munkamenet-azonosítót a paramétereken keresztül továbbíthatja, ahogy fent tettünk. Ezenkívül van egy mechanizmus a PHP-ben, amely hozzáadja a kívánt paramétert a linkre, és rejtett mezőket ad hozzá az űrlapba. A működés elve pontosan ugyanaz, mint a cookie-k, ezért nem szétszereljük ezt az esetet külön-külön.

Kis kérdőív (GYIK)

Hol van a munkamenet adatai fizikailag tárolva?

A Session adatok a kiszolgálón vannak tárolva. Alapértelmezés szerint fájlok vannak rögzítve, de megadhatja saját munkamenet adattároló mechanizmusait (például egy adatbázis használatával). Ha részleteket szeretne, olvassa el a session_set_save_handler funkciót.

Ki hoz létre egyedülálló munkamenet-azonosítót?

Egyedi munkamenet-azonosító (PHPSSESSID) kiszolgálót generál.

Lehet-e írni a saját munkamenetek mechanizmusait?

Igen, meglehetősen lehetséges. Amint látja, a PHP nem használ semmit természetfeletti - Az azonosítót a szakács kérelmei között tárolják, az ülés adatai a szerveren található fájlokban vannak tárolva.

Például az ülésekkel való munkavégzés saját mechanizmusa a Népszerű Kódexkönyvben található.

Mennyire biztonságos az ülések mechanizmusa?

A munkamenet csak egy egyedi munkamenet-azonosító segítségével azonosítható, így az általános esetben a támadó elég ahhoz, hogy ellopja a kiszolgálót. Vegye ki a fent használt teszt szkriptet. Ha a fellebbezés egy másik IP-től (a létrehozott munkamenethez képest), de a Phsessid ugyanazt fogja továbbítani, akkor a munkamenet sikeresen visszaáll, és a számláló növekszik az előző mentett értékről.

További védelmet nyújt Önnek. Például:

  • Megtakaríthatja az IP-munkamenet és a felhasználói ügynök ügyfél adatait (a kiszolgáló oldalán tárolva), majd minden egyes fogantyúnál ellenőrizni kell, hogy az aktuális értékek egybeesnek-e a mentett. Ebben az esetben meg kell keresnie a kompromisszumot a felhasználó biztonságának és kényelmének között.

    Például, ha a felhasználónak dinamikus IP-je van, és a munkamenetet az engedély megőrzéséhez használja, de ugyanakkor ellenőrizze az IP navigációját, majd minden címváltozást, a felhasználónak újra kell írnia a felhasználónevet és a jelszót.

    Hasonlóképpen, a felhasználói ügynök karakterlánc a böngésző verziójának frissítése vagy néhány plugin telepítésekor változhat.

  • Az ajánlott munkamenet-védelmi mechanizmusok egyike az azonosító újbóli létrehozása minden alkalommal, amikor a szkript felkéri (lásd a Session_Regenerate_ID funkciót). A szkript megtekintése és a szakterület munkálási algoritmusa lehet.

    Jegyzet.Ha úgy gondolja, hogy a hivatalos honlapon folytatott vita, akkor az azonosító újbóli létrehozásakor a problémák párhuzamos hozzáféréssel merülhetnek fel.

Munkamenetek, amelyek újraindításával azonosítóval rendelkeznek

Forgatókönyv


// blokk 1.
session_start ();
ha.(.($ _Session ["kezdeményezett"]))
session_regenerate_id ();
mÁS.
$ _Session ["kezdeményezett"] \u003d igaz.;

// blokk 2.
ha.(.($ _Session ["Nézetek"]))
$ _Session ["Nézetek"] ++;
mÁS.
$ _Session ["Nézetek"] \u003d 1;

// 3 blokk.
visszhang."
< body>
Megtekintések száma: "$ _session [" Nézetek "]."

" ;

?>

Mint már ismert, a HTTP protokoll lehetővé teszi a webes alkalmazások telepítését az "Sessions" - az ügyfél és a kiszolgáló közötti párbeszédet, és a párbeszéd állapotát a kérés kérésére tárolják.

A PHP nyelv, a webes programozás fő nyelvén, a HTTP munkamenet-mechanizmus használatának képességét biztosítja, figyelembe véve az aggodalmak nagy részét ezen munkamenetek szervezése és tárolása során. Hadd emlékeztessem Önt, hogy szükség van a HTTP-ülések mechanizmusára:

  • A szervernek egyedi munkamenet-számot kell létrehoznia.
  • A munkamenet számát át kell adni az ügyfélnek (általában cookie-kon keresztül).
  • A szervernek képesnek kell lennie arra, hogy mentse a munkamenet-adatokat a fájlokba vagy az adatbázisban, hogy helyreállíthassák, tudjuk, hogy az ügyfél elküldi a kiszolgálót a későbbi kérések során (cookie-k is).

Valójában az egyetlen olyan cselekvés, amelyet a PHP programban kell meghozni, hogy az ülések mechanizmusának fogaskerekei csak egyetlen funkciót hívjanak: session_start (). Ez a funkció teszi az összes szükséges intézkedést:

  • Ellenőrzi, hogy az ügyfél nem küldte meg a már meglévő munkamenet számát a cookie-ban vagy a kérés paramétereiben. Ha az ügyfél elküldte a munkamenet számát, akkor a munkamenet adatait az állandó tárolás helyéből (például a fájl) a memóriába tölti, és a program elérhetővé válik $ _session tömbben. Ha az ügyfél nem küldte el a munkamenet számát, vagy egy ilyen munkamenet nem létezik a szerveren - új munkamenetet hoz létre egy új számmal, és adatait egy $ _session tömbön keresztül is elérheti, amely egy új munkamenet esetén is elérhető üres lesz. Az újonnan létrehozott munkamenet száma a Set-Cookie-kiszolgáló válaszadagolójába kerül.
  • Biztosítja a munkamenetadatokat. Miután a PHP program feldolgozta a kérést, jelen állapot A $ _Session Array az állandó tároló helyén tárolódik, hogy ismét elérhető legyen a következő ügyfélkéréskor.

Most, tudva a Session_start () rejtett részleteket, játszhatunk ezzel a mechanizmussal. Az alábbi példa egy számot tárol a munkamenetben, amely minden egyes ügyfélkéréssel növekszik:

Amikor először adja meg ezt az oldalt, a kiszolgáló egy csomó böngészőt küld a munkamenet számával:

Set-cookie.: Psyssid \u003d 4ftvca7jmmnm04q95r3ssk6r6; PATH \u003d /

És ugyanazt a munkamenet-böngészőt minden további kérésre visszaküldi a kiszolgálóhoz. Most, ha tisztítja a cookie-kat a böngészőben, akkor egy új munkamenet jön létre a kiszolgálón, és a teszt szkriptben lévő fiók újra megkezdődik.

Egy igazi példa: felhasználói bejelentkezés

A leggyakrabban foglalkozik a felhasználói bejelentkezés használatakor. A webhely beírásakor a felhasználó belép a kiszolgálót ellenőrző bejelentkezési és jelszó. Ha a bejelentkezés helyes, akkor a kiszolgálónak emlékeznie kell a felhasználói adatokra a munkamenetben, hogy ne kérjen többet jelentkezzen be a jelszóval. A legegyszerűbb esetben ez a példa:

Tömb ("Jelszó" \u003d\u003e "123", "Cím" \u003d\u003e "Admin",), "Felhasználó" \u003d\u003e Array ("Jelszó" \u003d\u003e "qwe", "Cím" \u003d\u003e "Felhasználó",),) ; Visszatérési konzol ($ felhasználók [$ bejelentkezés])? $ Felhasználók [$ bejelentkezés]: null; ) Funkció GetCurrentuser () ($ User \u003d Isset ($ _ Session ["Session [" ülés])? $ _Session ["Felhasználó"]: null; vissza $ felhasználói;) Funkció SetCurrentuser ($ _session ["felhasználó"] \u003d $ felhasználó;)?\u003e

Helló,!
Link1 referencia2.

Eljár szórakozni Nem látogatta meg a webhelyet. Adja meg a bejelentkezést és a jelszót:
Belépés: Jelszó:

Ez a program bejelentkezési és jelszót kér, és bejelentkezhet bejelentkezéssel felhasználó., qwe. vagy admin., 123 . Az együttműködő felhasználó üdvözlést mutat. Az üzenet megjeleníti az üzenetet, ha a felhasználónév vagy a jelszó helytelen.

Amint lehetséges volt menni erre a "webhelyre", kacsa a linkeken (Link1, Reference2), miközben fennmaradó felhasználót.

Milyen adatokat tárolhat az üléseken?

Által alapértelmezett PHP. A munkamenet-adatokat átmeneti fájlban szövegként tárolja. Ebben az ideiglenesnek tekintheti meg a könyvtárba pHP fájlok. Ezt a könyvtárat a PHPInfo () a környezetben, a temp. Ebben a könyvtárban megtalálja a specifikus fájlokat 4ftvca7jmmnm04q95r3ssk6r6Ahol a 4ftvca7jmmnm04q95r3ssk6r6 a cookie-nek küldött munkamenetszám. Vessen egy pillantást erre a fájlra: Ha elkezdte a fenti első példát, a fájlt megközelítőleg a tartalom: "Érték | I: 2;" Ez a szöveg a munkamenet tartalmának soros bemutatása, ahol csak egy változó van tárolva a számmal.

Minden olyan érték, amelyet a PHP program egy $ _session tömbön keresztül helyezkedik el, a munkamenet mentésekor, szöveges fajokká, majd rögzítve a fájlban. A szövegváltozók konvertálási folyamatát "serialization" -nak nevezik. Így az ülésen bármely olyan adat, amelyet a php sorializálhat.

Szerencsére a PHP Serialize-ben nemcsak egyszerű értékek Úgy tűnik, mint a számok és a vonalak, de összetett struktúrák, például tömbök és tárgyak:

"; Nyomtatás_r ($ _ ülés); echo""$ _Session [" WestArray "] \u003d tömb (1, 2, 3," egy "," két "," három "," gyermek "\u003d\u003e tömb (5, 6, 7), $ obj \u003d új stdclass (); $ Obj-\u003e x \u003d 1234; $ obj-\u003e y \u003d 4567; $ _session ["tesztobjektum] \u003d $ obj;

Ez a példa ezeket az adatokat rögzíti a munkamenetfájlba:

WestArray | A: 7: (I: 0; I: 1; I: 1, I: 2; I: 2; I: 3; I: 3; S: 3: "Egy"; I: 4; S: 3 : "Két"; I: 5, S: 5: "Három"; S: 5: "Gyermek"; A: 3: (I: 0; I: 5; I: 1, I: 6; I: 2; I: 7;)) Testobject | O: 8: "STDCLASS": 2: (S: 1: "X"; I: 1234; S: 1: "Y"; I: 4567;

Tárgyak tárolása az ülésen

A munkamenetben, amint láthatja, tárolhatja az objektumokat. De ugyanakkor emlékezni kell arra, hogy a munkamenet objektumok tartása, amelyek bármilyen módon utalnak a "házi készítésű" osztályok, vagy az osztályok példányainak tárgya, szükséges, hogy ezek az osztályok hirdetései a session_startig történjenek ( ) hívás. Ez az, hogy a PHP-nek ismernie kell az osztályt, mielőtt a munkamenetadatok deserializálásakor említené.

Amikor az objektumok mentésre kerülnek, vannak olyan helyzetek, ahol az objektum valamilyen oknál fogva elfogadhatatlan vagy nem lehetséges. Ilyen esetekben manuálisan végezzük a sorozatot a "Magic" módszerek __sleep () és __wakeup () az osztályban.

Mellesleg, A szerializáció megvalósítható és "manuálisan" lehetséges, és nem szükséges a munkamenetadatok mentése / letöltése. Szükség lehet, ha a kérelemben szereplő adatokat később kell elmenteni, vagy átadni a hálózaton keresztül. Funkciók, amelyek hasznosak lehetnek a serialize / deserialization - serialize (), nem kiszívó (), json_encode (), json_decode ().

Mit nem lehet tárolni a munkamenetben?

Az ülésen lehetetlen tárolni, hogy mit lehetetlen sorozni. Az ilyen gazdálkodó egység példája bármilyen PHP erőforrást szolgálhat. Az erőforrások hálózati kapcsolatok, nyitott fájlleírók, adatbázis-kapcsolatok és más objektumok. A PHP erőforrás hivatkozás a belső objektumra a PHP mélységeiben, amely nem érhető el közvetlenül a programból, de amellyel működhet, különböző PHP funkciókat okozhat. Egyfajta "fekete doboz", amelynek tartalma nem és nem kell soroznia.

További jellemzők

A PHP fejlesztővel rendelkezik, amely képes megvalósítani a saját munkamenet adattárolási módját, például az adatbázisban. Ehhez be kell hajtania azokat a funkciókat, amelyek menteni és letölteni a munkamenet adatokat az állandó tárolási helyről. Ezután ezeket a funkciókat a funkció hívja a PHP-ben session_set_save_handler.

A munkamenetes adatok megtakarításának és letöltésének folyamatának felgyorsítása nagy töltött oldalakon a Memcacached kiszolgáló használható, amely adatokat tárol a memóriában. A munkamenet-tárolási módszer támogatása PHP-be épül, és a PHP.INI konfigurációs fájlon keresztül konfigurálva van.

Beállíthatja a cookie paraméter nevét, amelyen keresztül a munkamenet számát átadják, jelezve annak nevét, élettartamát, domainjét és más paramétereit.

Ezek és sok más lehetőség a PHP-ben lévő HTTP-munkamenetek beállítására a Session_ * funkciókon keresztül érhetők el.

A PHP-ben vagy a webhelyre jutott felhasználókra vonatkozó adatok, vagy a vevő, amikor a webhely oldalai közötti sok nehézség nélkül mozognak. A lecke nagyon fontos. A webhelyek 95% -ának megteremtéséhez releváns.

Mi a php munkamenet

Az ülések az ideiglenes adatinformációk tárolására szolgálnak (például, hogy a felhasználó belépett a webhelybe), amikor az egyik webhely oldalai között mozog. A munkamenetek használatakor az adatokat ideiglenes fájlokban tárolják a kiszolgálón.
Leggyakrabban az online áruházak, a fórumok, a hirdetőtáblák, a szociális hálózatok, a blogok és egyéb források létrehozásakor. A munkamenet-rendszer kényelme az, hogy megőrizze a zárt felhasználó / vevő ideiglenes adatait, az adatokat, amelyekre egy bizonyos idő gyors hozzáférése van. A munkamenetnek természetes eltarthatósága - amíg a böngésző zárva van. Ha csak az oldalt bezárja, akkor a webhely megnyitásakor a felhasználó / ügyféladatok továbbra is rendelkezésre állnak.

A munkamenet logikája

A munkamenet (vagy munkamenet) egyfajta ideiglenes adattároló. Azonnal figyelmeztet, hogy kis mennyiségű adat ér. Például a beállító felhasználójának vagy sorozatszámának bejelentkezési és jelszava az adatbázisban.

Példa a munkára
1. A felhasználó belép a bejelentkezéshez és a jelszóhoz, és jön a webhelyre
2. A bejelentkezési és jelszóval rendelkező adatok mentésre kerülnek az oldal egyik oldalának munkamenetében:

Fájl index.php.

Session_start (); // Minden olyan fájl, amelyen ezeket a munkameneteket szeretné használni, a kód elején tartalmazza a "Start munkamenet" parancsot

$ bejelentkezés \u003d "admin";
$ Password \u003d "Pass";
$ _Session ["login"] \u003d $ bejelentkezés; // mentse a bejelentkezőt tartalmazó változót
$ _Session ["jelszó"] \u003d $ jelszó; // mentse a jelszót tartalmazó változó mentését

3. Ha a webhely másik oldalára megy, ez az adat is elérhető lesz:

Fájl example.php. (vagy bármely más oldal)

Echo "Your Login". $ _ Session ["login"]; // Will Out "A bejelentkezési admin", bár ezen az oldalon nem írtunk adatokat!
Nézze, minden egyszerű!

4. Ha meg szeretné törölni a munkamenet adatokat, akkor elég:

Fájl example.php.

Session_start (); // újra futtassa újra a munkamenetet

($ _ Munkamenet ["bejelentkezés"]); // így nem regisztrálta a változót, vagy "megsemmisített"
Echo "Your Login". $ _ Session ["login"]; // a "bejelentkezésed". Mivel megsemmisítettük az utolsó sorban, akkor nincs adat

Session_destroy (); // megsemmisíti a munkamenetet. Minden adat, beleértve a $ _session ["jelszó"] már nem. Amikor lekérdezésre kerülnek, hibát fog megjeleníteni
Általában ez sebességváltó hasonló a POST módszer, de csak akkor nem írni egy csomó felesleges kódot, de a továbbított adatok az oldalról az oldal tárolja az ideiglenes fájlokat a kiszolgálón. Ismétlem, hogy az üléseknek kis mennyiségű adatot kell tartalmazniuk, ezért alkalmasak a bejelentkezési / jelszó tárolására, a vevő kosara és más kis kötetek tárolására.

Átutalási értékek vagy tömb a PHP munkamenet használatával

A munkamenetben nemcsak a karakterláncot, hanem az adatsorokat is rögzítheti. Csak ne tegye túlságosan a tömb térfogatával, mivel mindez befolyásolja a szerver böjt és elfoglalt helyét.

Ismét használunk néhány kezdő oldalt index.php.

Session_start ();

$ r \u003d tömb ("egy", "két", "három");

$ _Session ["ARR"] \u003d $ r;

Az oldalon, ahol minden megjelenik
Adatok mentése a munkamenetekben, és menjen át a linken egy másik oldalra, ahol az összes adat kimenet lesz.

Fájl címzett, oldal teszt.php. Ahol megnyitunk egy tömböt

Session_start ();
Print_r ($ _ munkamenet ["ARR"]);
// eltávolítás
/*
Sor.
\u003d\u003e Egy.
\u003d\u003e Kettő.
\u003d\u003e Három.
*/
?>
Lehet, hogy frissíteni szeretné a leckét a memóriában. Általában mindenki világosnak kell lennie.

Egyéb munkavégzéshez szükséges egyéb szolgáltatások

session_unregister (string) - a munkamenet elfelejti az adott globális változó értékét;
session_destroy () - a munkamenet megsemmisül (például, ha a felhasználó a kimeneti gomb megnyomásával hagyta el a rendszert);
session_set_cookie_params (int élettartam [, stringút [, string domain]]) - Ezzel a funkcióval, akkor telepíteni, milyen hosszú a munkamenet fog élni, amelyben a UNIX_TIMESTAMP, amely meghatározza a halál időpontjában az ülésen.

Jellemzők listája a munkamenetekkel (munkamenet) a PHP-ben
session_cache_expire - Visszaadja a jelenlegi gyorsítótár-akció végét
Session_cache_limiter - kap és / vagy beállítja a Cashel Cashet Limiter-t
Session_commit - alias session_write_close ()
Session_decode - dekódolási adatok a sorból
session_destroy - megsemmisíti az ülésen regisztrált összes adatot
session_encode - titkosítja az aktuális munkamenet adatait karakterláncként
session_get_cookie_params - cook beállítások munkamenet
session_id - az aktuális munkamenet-azonosítót kap és / vagy beállítja
session_is_registered - Meghatározza, hogy a változó regisztrálva van-e az ülésen
session_module_name - megkapja és / vagy beállítja az aktuális munkamenet modult
session_name - megkapja és / vagy beállítja az aktuális munkamenet nevét
session_regenerate_id - módosítja az utóbbi időben létrehozott munkamenet-azonosítót
Session_register - egy vagy több változót regisztrál az aktuális munkamenethez.
session_save_path - kapja meg és / vagy beállítja az aktuális munkamenet megtakarítását
session_set_cookie_params - Beállítja a szakács paramétereit
Session_set_save_handler - beállítja a felhasználói szintű munkamenet tárolási funkcióit
Session_start - inicializálja a munkamenet adatokat
Session_unregister - A jelenlegi munkamenet változója
Session_Unset - Freed Minden változó munkamenet
Session_write_close - írja a munkamenet-adatokat és a végrendeletet

Példák az ülésekre

Oldalnézet számláló az ülés során. VITE példa. A böngésző lezárása után azonban a visszaszámlálás újra megkezdődik.

Néhány oldal egy munkamenet részeként látogat

// Egy egyszerű példa a cookie-k nélküli munkamenetek használatára.
session_name ("teszt");
session_start ();
$ _Session ["count"] \u003d @ $ _ munkamenet ["szám"] + 1;
?>

Számláló


A jelenlegi munkamenetben a böngészővel megnyitotta ezt az oldalt.
Egyszer).
Zárja be a böngészőt a mérő alaphelyzetbe állításához.
Kattintson ide az oldal frissítéséhez!
Minden egyes átmenetnél a számláló 1-vel növekszik)

Kösz a figyelmet! Sok szerencsét a törekvésekben!

A PHP-ben való munkamenetek az ügyfél számítógépinformációs szerver oldalának megmentésére szolgáló mechanizmus. Tény, hogy a session PHP nem olyan nehéz téma, de az ő megértése, amit tudnia kell azt az elvet, a dolgozó a cookie-kat a PHP. Tehát, ha nem tudja, hogyan működik a cookie a PHP-ben, először olvassa el a megfelelő cikket, majd visszatérsz ide.

Az angol nyelvről származó ülésszak ülésként fordítva, így a PHP-ben való ülésszak érthetőbbé válik, de a "munkamenet" kifejezés, és ezt a cikket fogjuk használni.

Az ülés PHP nagyon hasonlít a cookie-t, ugyanaz a párok a kulcs \u003d\u003e érték, csak vannak tárolva a szerver oldalon.

Session_start ()

A munkamenet meg kell kezdeni, mert van egy session_start () funkció. Ez a funkció megkezdi a munkamenetet, vagy egy munkamenetet, amennyit hívhat.

A session_start () funkció kívánatos az oldal elején, de példáimban nem teszem ezt.

Array $ _session.

Az ülések olyan változók csoportjai, amelyek a szerveren tárolódnak, de egy egyedülálló látogatóhoz tartoznak. Ismétlem, ez a legfontosabb pont: a szerveren a munkamenetek tárolódnak.

Annak érdekében, hogy az egyes látogatók interakcióját adataival együtt használják cookie fájl., amelynek létrehozása a PHP megadja magát, nem kell aggódnia. Ez a cookie csak a kiszolgálóra vonatkozik, és nem használható a felhasználói adatok megszerzéséhez.

A szerveren a munkamenetadatok tárolva vannak szöveges fájl És a PHP programban elérhetőek a $ _session tömbben. A munkamenetben bekövetkező változó megőrzéséhez ehhez az összeget hozzárendeljen.

Végül kezdjük a példákat. Minden nagyon egyszerű.

A PHP-ben. érték. ";?\u003e

Most próbáljunk meg egy értéket egy másik példában egy soros $ _sessession-t kapni.

A PHP-ben.

Jegyezzük meg, ha a második példában töröljük a session_start () függvény, akkor nem férnek hozzá a $ _SESSION tömb adatokat.

MUNKAMENET AZONOSÍTÓ ()

A munkamenet létrehozása után automatikusan elérheti az egyedi munkamenet-azonosítót a Session_ID () funkció segítségével. Ez a funkció lehetővé teszi, hogy megadja és megkapja a munkamenet azonosítójának értékét.

A PHP-ben.

Akkor nézd meg a eszköztár a böngésző fejlesztők (a Chrome Ehhez nyomja meg a Ctrl + Shift + I, majd a Források, talál egy cookie-t), ez a tartomány tegye a cookie-böngésző nevét PHSESSID, és körülbelül ez az érték: "7G5DF9RKD1HHVR33LQ1K6C72P7".

Ez a PHPSSESSID érték szerint határozza meg a böngészőt, és dolgozik a megfelelő változókkal, amelyek elérhetők lesznek a szkript a $ _session Array, amint már korábban írt.

Session_name () funkció

Ha a Session_ID () függvények lehetővé teszik, hogy megkapja a munkamenet azonosító értékét, a Session_Name () funkció lehetővé teszi, hogy megtudja a munkamenet nevét.

A PHP-ben.

Ismét a session_start () funkcióról

Most már többet tudni a prozhanism az ülések PHP, és meg kell, hogy visszatérjen a session_start () függvény újra. Ez a szolgáltatás inicializálja az aktuális felhasználó munkamenet mechanizmust. Pontosan ez történik:

  • Ha először indította el a webhelyet, a Session_start () beállítja a cookie-t az ügyféltől, és átmeneti tárolást hoz létre a felhasználói azonosítóhoz társított kiszolgálón.
  • Megadja a továbbított aktuális azonosítóhoz kapcsolódó adattárat.
  • Ha van adat a szerver tárolójában, akkor egy $ _session tömbbe kerülnek.
  • Ha a PHP.INI fájl regisztrációs_globals be van kapcsolva, akkor a $ _session tömb összes eleme globális változókká alakul.

Példa a munkamenet használatára

Most megnézzük azt a példát, amely lehetővé teszi kisebb kísérleteket a munkamenetekkel.

A PHP-ben.

Számláló

Az aktuális munkamenetben megnyitotta az oldalt idő.

Nyisson meg egy példát a "\u003e Ez a lap.

Az ülések minden munkája egy sor $ _session-on alapul, egyértelműen ebben a példában látható.

Ha bezárja a böngészőablakot, a munkamenet leáll, a mérőünk visszaáll. A PHP-ben lévő munkamegállományok viselkedése megváltoztatható, a cikkben egy kicsit tovább térünk erre a kérdésre.

A munkamenet befejezése

A munkamenet befejezéséhez szükségünk van:

  1. Törölje a $ _session tömböt.
  2. Törölje az ideiglenes tárolást a kiszolgálón.
  3. A munkamenet cookie törlése.

Clear massive $ _session használhatja a Session_Unset () funkciót.

A session_destroy () funkció törli a kiszolgáló ideiglenes tárolását. By the way, nem tesz többet.

Törölnie kell egy Session Cookie-t a SetCookie () funkció segítségével, amelyet egy stúdióban tanulmányoztunk a cookie-val a PHP-ben.

Példa a munkamenet befejezésére:

A munkamenet befejezése

A munkamenet befejeződött.

Most kísérletet végezhet: futtathat egy példát egy ablakban egy ablakban, szélesítse a számlálót, majd futtassa a példát a munkamenet törlésével, és megújítsa az oldalt a mérővel.

Távolítsa el a cookie-k fájlt, mint ez:

setcookie (session_name (), "", idő () - 60 * 60 * 24 * 32, "/")

Ismét a session_name () és a session_id () funkciókról

A session_name () és a session_id () funkciók ritkák a gyakorlatban, de írok rájuk, mivel a cikket a PHP-ben található ülések működési mechanizmusával kell feltüntetni.

Ezen funkciók használatával megadhatja saját nevét és az ülések azonosítókat, de ezt nem ajánlott erre. Ha be akarta állítani őket, akkor írja be ezeket a funkciókat a Session_start () funkció előtt, az alábbi példában:

A PHP-ben.

A példa használatakor az összes felhasználó ugyanazt a munkamenet-azonosítót hozzárendeli.

A Session_Name () függvény (itt a Chrome és az Internet Explorer programban (például a Chrome és az Internet Explorer) című fejezetből származó részletet elindítjuk, majd minden böngészőben saját, egyedi munkamenetben lesz azonosító. A böngészők tárolja a cookie-kat mindegyik a mappát, így a session_start () függvény, hogy minden böngésző, hogy saját, egyedi azonosító, és ennek megfelelően az egyes böngésző jön létre egy egyedi tároló a szerveren. Ezért az egyes böngészőknél egy méterrel (ez) példát jelentenek egymástól függetlenül.

Ha ugyanazt a munkamenet-azonosítót adja meg minden felhasználó számára, akkor a szerveren egy tárolóval fog működni. Íme egy példa egy olyan számlálóra, amely a különböző böngészők látogatását veszi figyelembe:

100) (session_unset (); session_destroy ();)?\u003e A PHP-ben.

Számlálószám 2.

Megnyitotta az oldalt különböző böngészőkben idő.

Nyisson meg egy példát a "\u003e Ez a lap.

Ha ezt a példát futtatja, akkor nem tény, hogy ott lesz egy egységet. Más látogatók már megváltoztathatták az értékeket a Session Tárolás a szerveren. Ha ebben az esetben a kiszolgáló törli a tárolót - nem tudom, így ha a mérőt túllépték, akkor a 100 érték teljesíti az ülésen.

A várakozási idő beállítása

Alapértelmezés szerint az "él" munkamenet, amíg a látogató bezárja a böngészőablakot. Ez annak köszönhető, hogy a session_start () funkció az ügyféllel egy ilyen cookie-val van.

A munkamenet élettartama megváltoztatható a session_set_cookie_params () funkció használatával, itt van a szintaxis.

session_set_cookie_params (int élettartam [, stringút [, string domain [, bool biztonságos]]))))))

A gyakorlatban elég ahhoz, hogy csak az első paramétert (élettartamot) használja, írja le az időt másodpercben, amely meghatározza, hogy hány szerver kell emlékeznie a munkamenet állapota után, miután a böngésző zárva van.

A session_set_cookie_params () funkció csak a szkriptidőszakra vonatkozik.

Itt van egy példa a funkció használatára:

A PHP-ben.

Számlálószám 3.

Számláló értéke:.

Nyissa meg a mérőt "\u003e Ez a lap.

Csavarja be a számlálót, és zárja be a böngészőt, 30 Sukund után nyissa meg ezt a példát. A munkamenet folytatódik.