95 Kezdőlap - Webszerkesztés - PHP - Látogatottság-számláló

Napi látogatottság

számláló

Mintapélda

Helyezzünk el a weboldalunkon egy számlálót, mely mutatja, hányan látogatták meg a mai napon eddig az oldalunkat!

A legegyszerűbb megoldás alapgondolatát az jelentheti, ha Ennek megvalósításához fájlkezelés szükséges, aminek legfőbb műveletei Szükségünk lesz még két kiegészítő függvényre a következő lehetőségekkel: Ezekkel már könnyen teljesíthető a feladat:
<?

    $fajlnev = date("y-m-d") . ".txt" ;			// (1)

    if( file_exists($fajlnev) )				// (2)
    {
        $f = fopen( $fajlnev , "r" ) ;
	$n = fread( $f , filesize($fajlnev) ) ;
	fclose( $f ) ;
    }
    else						// (3)
    {
        $n = 0 ;
    }

    $n++ ;						// (4)

    $f = fopen( $fajlnev , "w" ) ;			// (5)
    fwrite(  $f , $n ) ;
    fclose( $f ) ;

    print "Oldalletöltések száma: $n" ;			// (6)

?>
A programban számmal jelzett részekkel az alábbi feladatokat végezzük el:
Oldalletöltések száma: 1199

Egy nem várt probléma

Azonban van egy komoly probléma ezzel a megvalósítással: a számláló jelenleg nem a látogatókat, hanem az oldalletöltéseket számolja. Ugyanis az oldal minden frissítése után eggyel tovább növekszik a számláló, nem pedig csak az új látogatók esetén.

Kérdés tehát: hogyan különböztessük meg az egyes látogatókat? IP címük alapján? Időkorlát alapján? Ezek nem tökéletes megoldások, hiszen pl. egy iskolai teremben jó eséllyel minden gép ugyanazon az IP-címen van (mert csak a belső hálózaton különböznek egymástól), pedig különböző felhasználók ülnek a gépek előtt. Illetve attól, hogy egy adott látogató pl. majd csak egy óra múlva frissíti az oldalt, attól még ő ugyanaz a látogató marad. De akkor mi jelentheti a megoldást?

Általában egyazon felhasználó tevékenysége alatt azt a folyamatot értjük, ami a böngészője megnyitásával kezdődik, és annak bezárásával végződik. Az e két esemény között eltelt időt munkamenetnek, vagy szakmaibb kifejezéssel élve session-nek hívjuk. Ha meg tudnánk valósítani, hogy munkamenetenként csak egyszer számoljon a számláló, akkor készen is lennénk a megoldással.

A munkamenet, vagyis a session használata

A fentiekben megfogalmazott cél eléréséhez a PHP session-kezelő lehetőségeit kell segítségül hívni. Ezen belül első lépésként szükségszerű egy munkamenetet indítanunk a kiszolgáló webszerveren, hogy mint felhasználók, ott is azonosíthatóak legyünk. Ehhez a session_start() függvényt kell felhasználnunk, melynek eredményeként csakugyan kapunk a szervertől egy úgynevezett session-azonosítót, ami csak a miénk, és csak az adott munkamenetre vonatkozik. Bár a saját session-azonsítónkat lekérdezhetjük a session_id függvénnyel - jelenleg ez így néz ki:
197r6b4o4tdh5t81gvjt9ob5k5
hossza 22-40 karakter közötti, véletlenszerű betűkből és számokból áll -, ennek azonban számunkra nagy gyakorlati jelentősége nincsen, hiszen ez csupán a szerveren fontos adat a mi ottani azonosíthatóságunk céljából.

$_SESSION Ám onnantól kezdve, hogy indítottunk egy munkamenetet, már használhatjuk a $_SESSION változót, és ez lesz számunkra az igazán fontos. Ez a változó egy olyan speciális, tömb típusú változó, melyben általunk megadott adatokat tudunk eltárolni úgy, hogy ezen adatok nemcsak az aktuálisan futó PHP programunk ideje alatt maradnak elérhetőek, hanem egészen addig, amíg a munkamenetünk létezik. Ebben az a legnagyszerűbb, hogy adatokat tudunk továbbvinni egyik oldalról a másikra.

Mire lehet jó a $_SESSION ?

Két nagyon tipikus felhasználását érdemes megemlíteni:
1.
Regisztrációt követő bejelentkezést megvalósító oldalak esetén a $_SESSION változóban tároljuk el a beléptetett felhasználó valamilyen azonosítóját azért, hogy minden további oldalon megmaradjon a belépés ténye, vagyis ne kelljen minden új oldal megnyitásakor újra és újra bejelentkezni.

2.
Webáruházak esetén a $_SESSION változó szolgál a vásárlói kosár adatainak eltárolására is. Ezáltal válik lehetővé, hogy a webshop különböző oldalai között ugrálva-böngészve folyamatosan gyűjtögethessük a megvásárolni kívánt termékeket a kosárban.

Tehát mitől lesz látogatottság-számláló?

Ennyi ismeret birtokában már sejthető, hogy a látogatóinkat is a $_SESSION tömb segítségével fogjuk nyomon követni, vagyis ennek segítségével fogjuk megoldani, hogy minden látogató csak egyszer (az áltata megnézett legelső oldal megtekintése alkalmával) növelje a számláló értékét a böngészése során. De hogyan? Mindezeket beépítve a korábban megírt programunk, az alábbi kódot kapjuk (benne színessel kiemelve az újdonságokat):
<?
    session_start();					// (7)

    $fajlnev = date("y-m-d") . ".txt" ;			// (1)

    if( file_exists($fajlnev) )				// (2)
    {
        $f = fopen( $fajlnev , "r" ) ;
	$n = fread( $f , filesize($fajlnev) ) ;
	fclose( $f ) ;
    }
    else						// (3)
    {
        $n = 0 ;
    }

    if( $_SESSION['valami'] != 1 )			// (8)
    {
        $n++ ;						// (4)

        $f = fopen( $fajlnev , "w" ) ;			// (5)
        fwrite(  $f , $n ) ;
        fclose( $f ) ;

        $_SESSION['valami'] = 1 ;			// (9)
    }

    print "Oldalletöltések száma: $n" ;
    print "Mai  látogatók  száma: $n" ;			// (6)

?>
Az ekképpen megvalósított programunk által működtetett számláló értéke már nem fog növekedni az oldal frissítésének hatására:
Mai látogatók száma: 485
Persze, ha közben bárhol máshol, más felhasználó is elkezdi nézni az oldalt, akkor azt már a számláló 1 új látogatóként érzékeli, és számolja.

Kiegészítő gondolatok

A megvalósított számláló kapcsán terítékre került elméleti megfontolásokat érdemes még néhány gondolattal kiegészíteni.

Feladatok

1.
Tegye elegánsabbá a számláló kinézetét azzal, hogy nem szöveges kiírással jeleníti meg az aktuális értéket, hanem valamilyen grafikus formában, például az alábbiak szerint:
Ehhez jó alapanyagot találhat a oldalon, melyek közül a fenti képen az Odometer Black számtípus látható.

2.
Készítsen statisztikát, mely az elmúlt hét látogatottságát mutatja be valamilyen grafikus formában. Ötletadónak a következő ábrát is használhatja:

Napi látogatottsági adatok

12.03 12.04 12.05 12.06 12.07 12.08 12.09 12.10
oldalletöltések száma       látogatók száma
Természetesen ahhoz, hogy a fenti diagram mintájára az oldalletöltések számát is, és a látogatók számát is ábrázolni lehessen, meg kell oldani, hogy mind a két adat eltárolásra kerüljön. Amennyiben még nincs elegendő elmentett statisztikai adat az Ön saját oldalához, úgy manuálisan létrehozott teszt-fájlokkal érdemes átmenetileg helyettesíteni azokat.


2019-12-10 16:24:00 Admin Köszönöm, ha Ön lesz az első, aki megírja ide véleményét, észrevételét, kérdését ezzel a lappal kapcsolatban.




Új hozzászólás:
E-mail cím:


Erre a címre küldjük ki a hozzászólás jóvá- hagyásához szükséges linket. Az e-mail címet sehol nem tesszük közzé.

Név:


Ez a név fog megjelenni az Ön hozzászólásai mellett.

Mennyi tizenhat + öt?
Számjegyekkel írja be!



Ez a robotok beírása elleni védelem miatt szükséges ellenőrzés.


© infojegyzet.hu, 2006. január