Cookies a statistika počtu návštěv podruhé

12. června 2001

V předchozím článku na téma „cookies“ jsme si ukázali, jak lze pomocí této technologie sledovat parametr „počet návštěv našeho webu“. Tentokrát pokročíme o kousek dál a ukážeme si trochu složitější skript, který nám dokáže lépe sledovat chování každého návštěvníka našeho webu: vygeneruje statistiku „které stránky si na našem webu si návštěvník prohlédl a kolikrát“.

Pokud jste nečetli předchozí článek, doporučujeme ho vaší pozornosti.

Jako vždy začneme malou ukázkou, pro účely článku zhuštěnou do jediné stránky. Pomocí následujících tří odkazů můžete simulovat návštěvu stránky číslo 1, 2 nebo 10. Po reloadu této stránky se v hranatých závorkách na řádku „Statistika:“ zobrazí nasimulovaný počet návštěv příslušné trojice stránek.

Přidat ke statistice 1. stránku
Přidat ke statistice 2. stránku
Přidat ke statistice 10. stránku

Statistika je zobrazena jako série dvojic číel, oddělených dvojtečkou, přičemž každá dvojice je ukončena středníkem. První číslo v každé dvojici udává ID stránky, která byla zobrazena, druhé číslo (za dvojtečkou) počet zobrazení této stránky. Pokud nějaká stránka není v tomto výpisu uvedena, znamená to, že zobrazena nebyla.

Poznámka na okraj: samozřejmě, tento formát výpisu je poněkud nečitelný. Na druhou stranu u informace podobného druhu primárně předpokládáme zpracování nějakým serverovým skriptem a/nebo uložení do databáze, nikoliv její zobrazení návštěvníkovi. Proto není v tomto článku řešeno „jak zobrazit statistiku trochu lidsky“ – ostatně, vyvstane-li ona nutnost, jde o úkol víceméně triviální.

Trojice „simulačních“ odkazů v úvodu článku dělá jediné – volá JS funkci AddStatistics. Na reálných stránkách by volání této funkce bylo zabezpečeno tak, aby probíhalo bez zásahu uživatele, např. v handleru události onLoad sekce BODY. Zde je tedy JS kód pro volání funkce AddStatistics, a to v obou verzích, pro HTML odkaz i pro handler onLoad:

zde jako HTML odkaz…
<a href="javascript:AddStatistics(‚MyStat‘,1)">Přidat ke statistice 1.stránku</a>
a zde jako onLoad handler…
<body onLoad="AddStatistics(‚MyStat‘,1)">

První z parametrů funkce AddStatistics určuje jméno cookie, do níž je příslušná statistika ukládána (toto jméno by tedy v rámci celého webu mělo být stejné, pokud náhodou nehodláme vést souběžně více statistik, např. pro jednotlivé oblasti webu – i to je samozřejmě možné), druhým parametrem pak je ID stránky, pro niž počítáme zobrazení, ID stránky je v rámci celého webu jedinečné. Kód funkce AddStatistics vypadá takto:

function AddStatistics( cn, id ) {
    var idstr = id + ":"
    if((fx=MyCookie.Read(cn))==null) fx="";
    if ((fi=fx.indexOf(idstr))==-1) {
        fx += (idstr+"1;");
    } else {
        var di = fx.indexOf(":",fi)        
        var li = fx.indexOf(";",fi)        
        var nr = parseInt(fx.slice(di+1,li)) + 1
        fx = fx.slice(0,fi) + idstr + nr + ";" + fx.slice(li+1)
    }
    MyCookie.Write(cn,fx,365);
}

Funkce přečte dosavadní statistiku, uloženou v cookie se jménem cn, pokud v této cookie nenalezne ID příslušné stránky, přidá toto ID na konec cookie a zároveň mu přiřadí počet návštěv 1, pokud příslušné ID nalezne, přečte dosavadní počet návštěv, inkrementuje jej o jedničku a uloží jej zpět do cookie. Nakonec je cookie zapsána zpět na klientský počítač, její platnost je nastavena na jeden rok. Formát, v němž je statistika do cookie ukládána, byl popsán výše (jde o onen řetězec s dvojtečkami a středníky jako oddělovači).

Podpůrné funkce pro čtení a ukládání cookies jsou zapouzdřeny do objektu MyCookie, stejného, jaký jsme použili v předchozím článku:

var MyCookie = {
    Write:function(name,value,days) {
        var D = new Date();
        D.setTime(D.getTime()+86400000*days)
        document.cookie = escape(name)+"="+escape(value)+
            ((days == null)?"":(";expires="+D.toGMTString()))
        return (this.Read(name) == value);
    },
    Read:function(name) {
        var EN=escape(name)
        var F=‘ ‚+document.cookie+‘;‘, S=F.indexOf(‚ ‚+EN);
        return S==-1 ? null : unescape(     F.substring(EN=S+EN.length+2,F.indexOf(‚;‘,EN))    );
    }
}

Definici objektu MyCookie i samotnou funkci AddStatistics je opět záhodno uložit do sdíleného .js souboru.

Zbývá statistiku, doposud uloženou na klientském počítači návštěvníka, nějak účelně využít. V tomto článku jsme použili pouze kontrolní výpis obsahu příslušné cookie na obrazovku:

document.write( "Statistika: [ " + MyCookie.Read(‚MyStat‘) + " ]<br>")

To nám ale v praxi nestačí – naším úkolem je dostat tuto statistiku k nám, tedy na stranu serveru. Pokud nám stačí statistika návštěvnosti jen u těch návštěvníků, kteří si u nás něco objednali, stačí nám“připlácnout“ výpis příslušné cookie do skrytého pole v objednávkovém formuláři – podrobnosti opět předchozí článek.

Chceme-li sledovat statistiku u každého návštěvníka, je zřejmě nejjednodušším řešením předat obsah cookie v URL stránky při volání nějakého ASP nebo PHP skriptu. Pokud je náš web tvořen pouze dynamickými skripty, je to bez problémů, v opačném případě musíme dynamickou stránku prohlížeči nějak vnutit – ať již otevřením samostatného okna (např. při opuštění webu), nebo použitím rámce nebo způsobem známým z výměnných bannerových systémů: zobrazením obrázku, jehož vlastnost SRC je nastavena na nějaký skript. U většiny uvedených způsobů však musíme eliminovat duplicity (jinými slovy: každý návštěvník nám vlastně místo jedné statistiky generuje sérii postupně rostoucích statistik). To lze zabezpečit různě: vygenerováním ID návštěvníka a jeho uložením do cookie, využitím (u ASP) objektu Session, případně při použití jediného odeslání cookie (na událost opuštění webu) prostým zkrácením platnosti cookie v klientském počítači – viz funkce AddStatistics. Záleží na vašem vkusu a také trochu ovšem na používané serverové technologii.

Co říci závěrem? Pokud si dáte práci s naprogramováním popsané techniky, může se stát, že získaný výsledek bude podobný jako při mnohem jednodušším použití některé ze služeb typu Navrcholu – jinými slovy, ověříte si, že například 1000 pageviews denně děleno 100 návštěv denně (výsledek získaný ze služby Navrcholu) opravdu odpovídá přibližně 10 pageviews na jednoho návštěvníka. Můžete ale také (mimo jiné) dojít k opačnému zjištění, totiž že oněch 1000 pageviews zabezpečí třeba jen dva nebo tři „hloubaví“ návštěvníci, zatímco zbylých 98 návštěvníků měřený web opustí tak rychle, jak na něj přišli – a to je jistě informace, která má svoji smutnou hodnotu.

Přeji vám příjemný den.

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *