Sessions in php

A programozásra szánt különféle konferenciákban először mindig olyan érdeklődést kérek, mint a "webes programozás" és a "szkriptek". Az ilyen fórumokon a PHP-vel kapcsolatos kérdések meglehetősen egyszerűek, és csak a PHP közös megértését igénylik, de a leggyakrabban feltett kérdéseim a következők: "Mi a PHP munkamenetek és mi / hogyan lehet őket enni?". Szeretném tisztázni ezt a kérdést egyszer és mindenkorra.







A PHP-t kezdettől fogva mindenki elfogadta, de amint elég nagy projekteket kezdtek létrehozni ezen a nyelven, a fejlesztők új problémával szembesültek: a PHP-nek hiányoztak a globális változók fogalma! Ez azt jelenti, hogy egy bizonyos szkript végrehajtásra került, elküldte a generált oldalt az ügyfélnek, és a szkript által használt összes erőforrást megsemmisítették. Megpróbálom illusztrálni: tegyük fel, hogy van egy oldal két oldala, az index.php és a dothings.php. Ezeknek az oldalaknak a forrása így néz ki:

$ a = "hozzárendeltem index.php-hez";

Ha végrehajtod ezt a két szkriptet, akkor az első oldalon látod a "Azért lett hozzárendelve index.php" felirat, és a második oldal üres lesz.

Nem fogok bekapcsolódni a munkamenetek mechanizmusának technológiai kérdéseire, csak leírni, hogyan kell a PHP-ben dolgozni.

Hogyan kell dolgozni a munkamenetekkel?

Ha megpróbálja a példákat a cikkből (vagy a szkriptekből) bármelyik kereskedelmi tárhelyen, akkor semmi probléma ne legyen a munkamenetekkel való együttműködés során. Ha Ön maga állítja be a szervert (legyen ez valódi kiszolgáló vagy emulátor), hiba léphet fel erről:

"Figyelmeztetés: open (/ var / state / php / sess_6f71d1dbb52fa88481e752af7f384db0, O_RDWR) sikertelen: Nincs ilyen fájl vagy könyvtár (2)".

Ez csak azt jelenti, hogy rosszul van beállítva a PHP. Megoldhatja ezt a problémát a helyes elérési út (a meglévő könyvtárba) írásával mentheti a munkameneteket a php.ini fájlba és indítsa újra a kiszolgálót.

Minden olyan szkriptet, amely a munkamenetekből származó változókat (adatokat) használja, tartalmaznia kell a következő sort:

Ez a parancs megmondja a kiszolgálónak, hogy ez az oldal minden olyan változót igényel, amely ehhez a felhasználóhoz (böngészőhöz) társul. A szerver ezeket a változókat (fájlokból vagy adatbázisokból) veszi át, és ezeket elérhetővé teszi. Nagyon fontos, hogy megnyissunk egy munkamenetet, mielőtt bármilyen adatot elküldenénk a felhasználónak; a gyakorlatban ez azt jelenti, hogy a session_start () függvényt az oldal elején kell hívni, például:







A munkamenet megkezdése után megadhat globális változókat. Ez elemi: hívjuk session_register ('var_name'); és a $ var_name elérhető az összes olyan oldalon, amely a munkamenetet használja. Például kiírjuk a cikk elején megadott programot:

// állítsa be a változó értékét

$ a = "hozzárendeltem index.php-hez";

// regisztráljon változót egy nyitott munkamenetben

// fontos: a változó nevek átkerülnek a session_register () függvénybe

Minden rendben van. Session betöltve!

Amikor ezeket a fájlokat futtatja (logikai sorrendben), az első parancsfájl (index.php) a következő eredményt adja vissza:

Minden rendben van. Session betöltve! Menjünk és nézzük meg, mi van ott:

És a második (dothings.php) ez:

Hozzászoktam a index.php-hez

A $ a változó mostantól elérhető a webhely összes olyan oldalán, amelyek elkezdték a munkamenetet.

Egyéb hasznos funkciók a munkamenetekhez:

session_unregister (string) - session <забывает> az adott globális változó értéke;

session_destroy () - a munkamenet megsemmisül (például ha a felhasználó a gombra kattintva elhagyta a rendszert <выход>);

session_set_cookie_params (int élettartam [, string path [, string domain]]) - ezzel a funkcióval beállíthatja, hogy mennyi ideig tart <жить> session az unix_timestamp meghatározásával határozza meg az időt <смерти> ülésén. Alapértelmezés szerint a munkamenet <живёт> amíg az ügyfél bezárja a böngészőablakot.

Most forduljunk a munkamenet mechanizmusának gyakorlati alkalmazásához. Nézzünk egy pár meglehetősen egyszerű és ugyanakkor hasznos példát.

Adja meg a jelszót, halandó

Felhasználónév:

jelszó:

// az adatokat elküldtük az űrlapon?

// ellenőrizze az adatok helyességét. ebben az esetben én

// megadta a felhasználónevet és a jelszót közvetlenül a kódba, a megfelelőbb

// ellenőrzi a bejelentkezési jelszót az adatbázisban és mikor

// emlékezz a felhasználónévre

// és továbbítsa <секретную> oldalt.

Helló, , a titkos oldalon vagy. )

Így az azonosítót egy oldalról (PHP-script) átmásolhatjuk egy másikra (a következő webhelyről érkező hívásig), ami azt jelenti, hogy meg tudjuk különböztetni az összes látogatót a webhelyen. Mivel a munkamenet-azonosító nagyon nagy (128 bites), gyakorlatilag nincs esély, hogy felvehessük a keresést. Ezért a támadó az alábbi lehetőségekkel rendelkezik:

a felhasználó számítógépén <троян>, amely ellopja az ülések számát;

a támadó elkapja a forgalmat a felhasználó számítógépe és a szerver között. Természetesen van egy biztonságos (titkosított) SSL protokoll, de nem mindenki használja;

Egy szomszéd jött a felhasználó számítógépére, és ellopta a munkamenet számát.

Az ilyen helyzetek, azon az alapon, hogy valaki ellop valamit valakitől, általában nem tartozik a programozó hatáskörébe. Ezt a rendszergazdáknak és a felhasználóknak kell gondoskodniuk.

A authorize.php fájl egy harmadik fél parancsfájl segítségével történő jelszó kiválasztására tett kísérlet;

Tehát programunkban egyértelműen kétet látunk <дыры>, egy kicsi és nem különösebben észrevehető, de a második - csak egy hatalmas, amelyen keresztül a legtöbb hacker és mászik, ahol nem kell.

Hogyan lehet <залатать> lyukszám 1?

// a gyökérkönyvtár teljes elérési útja, ahol a szkriptek találhatók

// ha a felhasználó oldalunk bármely oldaláról származik

// akkor olyan, mint a miénk.

// A $ HTTP_REFERER változó mindig elérhető alapértelmezés szerint

// a $ SERVER_ROOT értékből

// az adatokat elküldtük az űrlapon?




Kapcsolódó cikkek