České vysoké učení technické v Praze Fakulta elektrotechnická
Bakalářská práce
Počítadlo přístupů na WWW stránky Martin Kříž
Vedoucí práce: Ing. Martin Klíma Studijní program: Elektrotechnika a informatika strukturovaný bakalářský Obor: Informatika a výpočetní technika Červen 2006
ii
Poděkování Poděkovat bych chtěl zejména svému vedoucímu práce za možnost vykonat tuto práci pod jeho vedením. Dále bych chtěl poděkovat všem lidem, kteří využívají mé počítadlo a pomáhali mi tak v jeho testování a vývoji.
iii
iv
Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uložené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu §60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon).
V Praze dne ……………..
………….………………
v
vi
Abstract The main goal of this project is design and implementation of a web counter. Counting of accesses is realized by including generated image into a HTML code of monitored web presentation. Web counter allows to monitor a visit rate of arbitrary number of registrated web presentations. The results of measurements are available in the form of statistics.
Abstrakt Tato práce se zabývá návrhem a implementací počítadla přístupů na webové prezentace. Počítání přístupů je realizováno vkládáním generovaného obrázku do HTML kódu sledovaných webových prezentací. Počítadlo umožňuje sledovat návštěvnost libovolného počtu registrovaných webových prezentací. Výsledky měření jsou k dispozici ve formě statistik.
vii
viii
Obsah Seznam obrázků.................................................................................................xi Seznam tabulek ................................................................................................xiii 1. Úvod................................................................................................................ 1 1.1. Zadání ...................................................................................................... 1 1.2. Motivace .................................................................................................. 1 1.3. Umístění aplikace .................................................................................... 1 2. Popis problému ............................................................................................... 1 2.1. Obecné metody sledování návštěvnosti ................................................... 1 2.2. Problematika zvoleného řešení ................................................................ 3 2.3. Vymezení cílů práce ................................................................................ 4 3. Analýza ........................................................................................................... 4 3.1. Použité technologie.................................................................................. 4 3.2. Uživatelské role ....................................................................................... 5 3.3. Analýza požadavků na systém ................................................................. 5 3.3.1. Počítadlo ........................................................................................... 5 3.3.2. Webová aplikace............................................................................... 7 4. Návrh .............................................................................................................. 9 4.1. Umístění počítadla v prezentaci............................................................... 9 4.2. Počítání přístupů .................................................................................... 10 4.3. Naše řešení počítadla ............................................................................. 13 4.4. Informace od klienta .............................................................................. 14 4.5. Informace předané JavaScriptem........................................................... 15 4.6. Způsob uložení dat................................................................................. 17 4.7. Návrh webové aplikace.......................................................................... 17 4.7.1. Rozvržení – Layout......................................................................... 17 4.7.2. Obecný vzhled stránek.................................................................... 18 4.7.3. Stránky prezentace.......................................................................... 19 4.7.4. Obecná funkcionalita formulářů ..................................................... 19 4.7.5. Nastavení aplikace .......................................................................... 20 5. Implementace................................................................................................ 20 5.1. Identifikace prohlížeče........................................................................... 20 5.2. Identifikace webu................................................................................... 22 5.3. Vyhledávače a hledané fráze ................................................................. 22 5.4. Ochrana před SQL hackem.................................................................... 23 5.5. Počítadla v kategoriích........................................................................... 23 6. Testování....................................................................................................... 24 7. Závěr ............................................................................................................. 24
ix
7.1. Budoucí práce.........................................................................................25 8. Seznam literatury ..........................................................................................26 A. Snímky obrazovky .......................................................................................27 B. Databázové schéma ......................................................................................29 C. Vyjádření uživatelů ......................................................................................30 D. Pokyny pro instalaci .....................................................................................32 E. Pokyny pro správu ........................................................................................33 F. Obsah přiloženého CD..................................................................................34
x
Seznam obrázků Obr. 2-1 Vložení externího objektu .................................................................... 3 Obr. 4-1 Webová prezentace s počítadlem přístupů ........................................... 9 Obr. 4-2 Obdržení neaktuálních dat.................................................................. 10 Obr. 4-3 Mechanismus cookies ........................................................................ 11 Obr. 4-4 Připojení lokální sítě k Internetu ........................................................ 12 Obr. 4-5 Předání informací JavaScriptem......................................................... 16 Obr. 4-6 Rozložení webové prezentace ............................................................ 18 Obr. 4-7 Kontrola dat z formuláře .................................................................... 20
xi
xii
Seznam tabulek Tab. 2-1 Srovnání metod sledování návštěvnosti ............................................... 2 Tab. 5-1 x04Browser – definice prohlížeče...................................................... 21
xiii
xiv
1. Úvod 1.1. Zadání Navrhněte a implementujte počítadlo přístupů na WWW stránky. Internetová aplikace bude obsahovat katalog s registrovanými weby (internetové prezentace na kterých jsou umístěna naše počítadla). Do katalogu bude možné libovolně registrovat nové webové prezentace. Katalogem bude možno procházet prostřednictvím kategorií nebo v něm vyhledávat pomocí formuláře. K jednotlivých webovým prezentacím budou k dispozici podrobné statistiky návštěvnosti. Dále budou k dispozici globální statistiky (ze všech registrovaných webů). Aplikace bude umožňovat určitá nastavení parametrů počítadel uživatelům. Budou k dispozici žebříčky nejnavštěvovanějších webových prezentací.
1.2. Motivace Na internetu denně přibývají nové a nové webové prezentace. Může se jednat o firemní nebo osobní stránky zajišťující pouze prezentaci, ale také o různé internetové aplikace. Se vzrůstajícím zájmem o internetovou prezentaci souvisí také potřeba sledovat její návštěvnost. Může to být z důvodů čistě informativních (zda jsou poskytované informace pro uživatele internetu zajímavé), nebo komerčních (např. zisk z umístění reklamy). Je potřeba analyzovat, jak velký zájem je o poskytované služby nebo zboží. K těmto účelům slouží počítadla přístupů. Na internetu existuje mnoho veřejně přístupných počítadel, která poskytují různé služby. My jsme si chtěli vyzkoušet vytvořit počítadlo vlastní, splňující naše požadavky.
1.3. Umístění aplikace Webovou aplikaci jsme nazvali @udit a bude umístěna na adrese: http://www.audit.fridgy.net
2. Popis problému 2.1. Obecné metody sledování návštěvnosti Pohybujeme-li se v prostředí internetu, narážíme na dva typy webových prezentací. Prvním jsou statické webové prezentace charakteristické tím, že jejich obsah (co se týče zdrojového HTML kódu) je neměnný. Druhým typem jsou dynamické webové prezentace, nebo též internetové aplikace, jejichž
1
HTML kód je generovaný v závislosti na různých parametrech. Jsou to například různé internetové obchody, zpravodajské servery, katalogy apod. Pokud sledujeme návštěvnost nějaké webové prezentace je potřeba každý přístup na stránky dané prezentace analyzovat a nějakým způsobem zaznamenat pro pozdější vyhodnocení. První možností jak sledovat návštěvnost webové prezentace (jak statické tak dynamické) je přímo vyhodnocovat přístupový log na webovém serveru. Každému zobrazení stránky webové prezentace totiž předchází požadavek, který může být webovým serverem automaticky zaznamenán (logován) do souboru (logu). Tyto záznamy mohou být následně vyhodnocovány. Ne každý webový hosting (poskytovatel prostoru na webovém serveru) však tuto možnost poskytuje. Dynamická webová prezentace má oproti statické výhodu v tom, že je možné přímo do jejího zdrojového kódu implementovat mechanismus sledování návštěvnosti. Při každém generování obsahu stránky se zároveň provede část kódu, zaznamenávající informace o dané návštěvě. Statické weby tuto možnost přímo nemají. Toto řešení není tudíž univerzální. Třetí možností je využití toho, že jazyk HTML umožňuje vkládání různých objektů do webové prezentace. Tento objekt se postará o zaznamenávání návštěvnosti. Nejčastěji se využívá vkládání dynamicky generovaných obrázků. Toto řešení je univerzální, tzn. je možné jej využít při sledování návštěvnosti obou typů webových prezentací. Problém může nastat v případě, že internetový prohlížeč z nějakého důvodu nenačítá tyto externí objekty. Přístup pak není zaznamenán a snižuje se tak přesnost měření. Následující tabulka shrnuje hlavní výhody a nevýhody jednotlivých metod sledování návštěvnosti. Nezávislost na hostingu
Statická prezentace
Přesnost měření
Webový log
NE
ANO
ANO
Počítadlo v kódu
ANO
NE
ANO
Externí objekt
ANO
ANO
NE
Tab. 2-1 Srovnání metod sledování návštěvnosti Naším cílem bylo sledovat návštěvnost webových prezentací bez ohledu na to, zda jsou statické nebo dynamicky generované. Poskytujeme tedy prostředek,
2
jakým je možné u statických webových prezentací zaznamenávat informace o návštěvnosti. Neznamená to však, že by se naše řešení nedalo využít u dynamicky generovaných webových prezentací, ba právě naopak. Naše řešení je univerzální. Využíváme metodu vkládání externího objektu do HTML kódu webové prezentace. V našem případě se jedná o dynamicky generovaný obrázek. Toto řešení má však i svá omezení, která budou popsána dále.
Obr. 2-1 Vložení externího objektu
2.2. Problematika zvoleného řešení Pro sledování návštěvnosti využíváme metodu vkládání dynamicky generovaného obrázku do kódu webové prezentace. Toto elegantní řešení však může být zcela nefunkční v případě, že internetový prohlížeč nebude z nějakého důvodu schopen zobrazovat obrázky. Může k tomu dojít ze dvou důvodů. Prvním je skutečnost, že daný internetový prohlížeč ze své podstaty nepodporuje zobrazování grafických dat (například nějaký textový prohlížeč). Druhým je to, že uživatel zakáže svému prohlížeči zobrazovat grafická data. Důvodem proč by to dělal může být například to, že má pomalé připojení k internetu a tudíž by ho stahování obrázků příliš zdržovalo. Těchto případů je v celkovém objemu návštěv naprosto zanedbatelné množství. Nebudeme se jimi tedy dále zabývat (ono to z principu zvolené metody ani není možné). Další problémy může přinášet využívání technologií, které nemusejí být na straně internetového prohlížeče podporovány. Je to hlavně tzv. skriptování na straně klienta a uložení dat na straně klienta. Tyto problémy a jejich řešení budou popsány v další části.
3
2.3. Vymezení cílů práce Cílem naší práce by měla být internetová aplikace sestávající ze dvou částí. Základem bude mechanismus zaznamenávání návštěvnosti webových prezentací, realizovaný formou generovaného obrázku. Druhou částí bude podpůrná internetová aplikace, zajišťující registraci nových počítadel a prezentaci nasbíraných dat. Systém by měl být navržen tak, aby co nejméně zatěžoval internetovou prezentaci jejíž bude součástí. Je tím myšlen zejména čas potřebný pro vygenerování vkládaného obrázku. Nebudeme vyvíjet speciální aplikaci pro správu systému. Tu ponecháme na produktech třetích stran. Systém bude totiž kompletně řízen daty uloženými v databázi, a pro její správu bude možno využít libovolný databázový nástroj. Získané údaje budou vyhodnoceny a porovnány s daty pořízenými pomocí podobných systémů.
3. Analýza 3.1. Použité technologie Jelikož se jedná o internetovou aplikaci, bylo třeba zvolit vhodný skriptovací jazyk, databázový server a jazyk pro skriptování na straně klienta. Výběr skriptovacího jazyka a databázového systému byl ovlivněn dostupností těchto technologií na webových serverech. Téměř každý hosting dnes poskytuje podporu skriptování v PHP a databázový server MySQL. Často je také k dispozici kombinace ASP a SQL Serveru. Pro první variantu hovoří hlavně její cena. PHP a MySQL jsou na rozdíl od ASP a SQLServeru k dispozici zdarma. Celý systém tedy bude možno provozovat zcela zdarma. Otázkou je kvalita služeb (dostupnost a rychlost databázového serveru, garance dostupnosti webového serveru apod.) na bezplatném hostingu. Výběr jazyka pro skriptování na straně klienta byl jednodušší v tom, že máme na výběr jen ze dvou variant: JavaScript a VBScript. VBScript byl zavržen okamžitě z důvodu podpory pouze od prohlížečů společnosti Microsoft. Samozřejmostí je jazyk HTML a designování vzhledu webové aplikace pomocí CSS.
4
3.2. Uživatelské role Z aplikačního pohledu budeme rozlišovat následující druhy uživatelů. •
Anonymní uživatel je návštěvník naší webové aplikace, který si prohlíží zobrazované informace, může si zaregistrovat svou webovou prezentaci a získat tím od nás počítadlo přístupů. Pokud anonymní uživatel projde procedurou přihlášení stane se z něho přihlášený uživatel.
•
Přihlášený uživatel má u nás registrovanou webovou prezentaci a přihlásil se prostřednictvím formuláře. Má možnost měnit určité parametry související s jeho počítadlem přístupů. Každý přihlášený uživatel má registrováno právě jedno počítadlo přístupů.
•
Návštěvník je uživatel prohlížející si webovou prezentaci registrovanou v našem systému, na níž je umístěno naše počítadlo přístupů. Zobrazením této webové prezentace dojde k zaznamenání určitých informací potřebných k vyhodnocení její návštěvnosti a zároveň k zobrazení počítadla přístupů. Návštěvník tedy přistupuje nepřímo (aniž by o tom věděl) do naší aplikace, tedy na náš server. Proto je zde tato role zmíněna.
•
Správce systému má právo měnit informace v databázi. Nemáme pro něho přímo aplikační podporu. Pro přístup k databázi používá technologie třetích stran.
3.3. Analýza požadavků na systém Při bližším rozboru zadání práce jsme dospěli k dalším požadavkům na náš systém. Požadavky jsme rozdělili zvlášť na počítadlo tedy na část zabývající se zaznamenáváním návštěvnosti a na webovou aplikaci umožňující registraci počítadel a prezentaci naměřených dat. 3.3.1. Počítadlo Počítadlu bude možno nastavit počáteční stav. To znamená, že nebude počítat od nuly. Hodí se to v případě, že webová prezentace doposud používala počítadlo jiné, nebo nepoužívala žádné. Ochrana počítadla. Počítadlo přístupů je možno provozovat pouze na webové prezentaci ke které je registrováno. Pokud je umístěno jinde, nesmí informace zaznamenávat a na jeho místě se zobrazí varování. Filtrování podle IP adresy. Počítadlo nebude zaznamenávat návštěvnost z určitých IP adres. Důvodem je aby vývojář sám neovlivňoval výsledky
5
měření návštěvnosti. Během testování by totiž mohl sám vytvořit mnoho falešných přístupů. Roboty. Na webové prezentace nepřistupují pouze internetové prohlížeče, ale také tzv. roboty. Tyto automatické stroje indexují obsah webových prezentací a následně umožňují vyhledávání v jejich obsahu (např. Google). Počítadlo by nemělo takovéto přístupy zaznamenávat. Režim počítadla. Počítadlo bude moci pracovat v režimu, kdy nezapočítává přístupy, ale pouze zobrazuje stav. Dále bude moci nastavit počítadlo, aby započítávalo přístupy, ale nebylo viditelné. Toto se hodí u webových prezentací využívající rámce. V rámu s menu bude počítadlo pouze zobrazeno a v rámu s obsahem bude započítávat. Nyní k tomu, jaké informace bude naše počítadlo zaznamenávat •
Jedná-li se o návštěvu nebo zobrazení. Návštěva je charakteristická tím, že se jedná o přístup z jednoho počítače za určitou dobu. Každý častější přístup je tzv. zobrazení.
•
Tzv. referrer je internetová adresa ze které jsme přišli. Budeme tedy zaznamenávat z jakých webů vedou odkazy na sledovanou webovou prezentaci. Potažmo budeme rozlišovat typ přechodu na mezistránkový (přechod v rámci dané webové prezentace) a přechod z jiného webu. Budeme zjišťovat zda referrer není náhodou vyhledávač. Pokud ano, zjistíme jaká byla hledaná fráze.
•
Dále budeme zaznamenávat jaká je aktuálně prohlížená stránka dané webové prezentace. Při vyhodnocení potom bude možno zjistit která stránka je nejvíce navštěvovaná (například nejčtenější článek apod.).
•
Budeme se snažit rozpoznat typ internetového prohlížeče ze kterého je daný přístup, dále operační systém počítače přistupujícího na webovou prezentaci, rozlišení a barevnou hloubku monitoru tohoto počítače.
•
Velmi důležitá je IP adresa přistupujícího počítače. Tu se pokusíme přeložit na jméno a z něho získat doménu nejvyšší úrovně.
Samotné počítadlo bude získané informace ihned zobrazovat. Bude to informace kolik lidí si momentálně prohlíží webovou prezentaci, a počty návštěv za různá období. Tato období budou dnes, týden, měsíc a celkem. V případě nedostupnosti databáze se namísto počítadla zobrazí příslušná informace.
6
3.3.2. Webová aplikace Webová aplikace bude umožňovat registraci nových počítadel. U počítadel která již jsou registrována bude umožňovat změnu určitých parametrů (přihlášeným uživatelům). Při registraci počítadla budou vyžadovány určité údaje. Bude to adresa webové prezentace, její název a stručný popis, jméno a email registrátora, heslo apod. Při odeslání registračního formuláře bude provedena kontrola na správnost zadaných údajů. Například formát emailu, povinná pole formuláře apod. Bude k dispozici katalog rozdělený do kategorií. Pod těmito kategoriemi se budou zobrazovat registrovaná počítadla. V katalogu se bude moci procházet podobně jako v adresářové struktuře. Počítadlo bude při registraci možno zařadit do jedné z existujících kategorií. Přeřazení do jiné kategorie bude řešit správce systému (stejně tak vytváření kategorií). Po registraci bude na zadaný email zaslána informace o registraci společně s dalšími informacemi a pokyny. Aplikace bude umožňovat vygenerování HTML kódu, který bude umístěn na webové prezentaci, na které se má počítadlo zobrazovat. Generovaný kód bude možno ovlivňovat v závislosti na volbě pro počítadlo (zda bude viditelné, zda bude započítávat přístupy) ve formuláři. Počítadlo bude také možno vyhledat pomocí formuláře pro vyhledávání. Zadané slovo bude vyhledáváno v internetové adrese, názvu a popisu všech registrovaných počítadel. Při procházení kategoriemi, nebo po vyhledávání bude zobrazen seznam počítadel z dané kategorie, resp. nalezená počítadla. Tento seznam budou odkazy na podrobnosti daného počítadla. Pokud bude seznam příliš dlouhý, bude stránkován. V podrobnostech budou vypsány údaje zadané při registraci a určité souhrnné statistiky. Dále zde bude odkaz na podrobné statistiky. V podrobných statistikách se bude moci vybrat sledované období. Implicitně to bude aktuální den. Období půjde vybrat buďto pomocí kalendáře, nebo zadáním rozsahu ve formuláři. Statistiky bude možné chránit heslem, takže budou přístupné pouze vlastníku počítadla. Ve formě sloupcových grafů se budou zobrazovat následující statistiky.
7
•
Souhrnné statistiky budou zobrazovat počet návštěv, zobrazení, unikátních IP adres, a čas posledního přístupu za sledované období.
•
Denní návštěvnost bude zobrazovat graf návštěvnosti v jednotlivé dny v týdnu.
•
Hodinová návštěvnost naopak graf návštěvnosti v jednotlivých denních hodinách.
•
Bude k dispozici tabulka vyhledávačů a jimi hledaných frází. Potom tabulka nejčastěji hledaných frází.
•
Dále statistika referrerů, tedy webových adres, ze kterých nejčastěji lidé přicházejí na danou webovou prezentaci
•
Přehled nejvíce navštěvovaných stránek dané webové prezentace
•
Statistiky internetových prohlížečů, operačních systémů, rozlišení monitorů a jejich barevných hloubek.
•
K dispozici bude také statistika návštěv indexovacích robotů, a které stránky jimi byly indexovány.
Počet zobrazených informací bude ve výpisu statistik omezen, proto pro získání kompletních dílčích statistik bude k dispozici export do textového souboru (tento soubor bude možno zpracovat např. v MS Excel). Dále budou k dispozici globální statistiky. Lišit se budou od statistik jednotlivých počítadel v tom, že do statistik budou zahrnovat všechna registrovaná počítadla. Zobrazovat se bude také žebříček nejvíce navštěvovaných webových prezentací za předchozí den a podobný žebříček pro nejvíce navštěvované kategorie. Celá aplikace bude navržena tak, aby práce s ní byla intuitivní. Důraz je také kladen na kompatibilitu s různými internetovými prohlížeči. Důležitým aspektem je také ochrana aplikace před vložením škodlivého kódu do formuláře pracujícího s databází. Řešení tohoto problému bude popsáno v implementaci.
8
4. Návrh 4.1. Umístění počítadla v prezentaci Zvolili jsme metodu sledování návštěvnosti prostřednictvím vkládání externího objektu do HTML kódu prezentace. V našem případě se bude jednat o generovaný obrázek počítadla. Výsledná webové prezentace klienta je tedy vytvořena následujícím způsobem. Nejdříve je vyslán požadavek na webový server na němž je prezentace umístěna. Ten prohlížeči odpoví jejím HTML kódem. Internetový prohlížeč tento kód zpracovává a narazí na odkaz k obrázku našeho počítadla. Vyžádá si tedy tento obrázek od našeho serveru a v tom okamžiku dojde k zaznamenání přístupu. Obrázek je vygenerován a zaslán prohlížeči, který jej zobrazí na webové prezentaci. Celý postup ilustruje následující obrázek.
Obr. 4-1 Webová prezentace s počítadlem přístupů Jelikož počítač z něhož je vyslán požadavek na zobrazení určité webové prezentace není většinou přímo spojen s příslušným webovým serverem, mohou určité mezilehlé prvky sítě (ale i samotný internetový prohlížeč) uchovávat předchozí odpovědi webových serverů. V případě že tento mezilehlý prvek (nebo prohlížeč) zjistí, že tuto odpověď má v paměti, nepošle požadavek
9
na webový server, ale odpoví klientovi sám. V takovém případě nedojde k zaznamenání přístupu, jelikož se o něm náš server nedozví. Následující obrázek tuto situaci nastiňuje.
Obr. 4-2 Obdržení neaktuálních dat Tento problém budeme řešit nastavením určitých hlaviček HTTP protokolu při odesílání odpovědi internetovému prohlížeči. Docílíme tím toho, že se posílaný obrázek nebude nikde po cestě ukládat a vždy bude vygenerován znovu.
4.2. Počítání přístupů Realizace počítadla přístupů není tak snadná, jak by se mohlo zdát. Nelze použít naivní přístup a jednoduše inkrementovat nějaký čítač přístupů. Jak bylo popsáno v sekci analýza, počítadlo musí rozlišovat, zda daný přístup je návštěvou nebo zobrazením. Musíme tedy rozpoznat, zda klientský webový prohlížeč na danou webovou prezentaci přistupuje poprvé nebo opakovaně. Bude tedy potřeba na straně klienta uložit informaci o tom, že určitou webovou prezentaci navštívil. Tento problém se obecně řeší pomocí mechanismu cookies. Cookie je malý textový soubor, který může být uložen na straně klienta. Cookie má definovanou dobu života po kterou je internetovým prohlížečem uchována. Při každém přístupu na server, který tuto cookie vytvořil je mu automaticky zaslána. Mechanismus cookies je ukázán na následujícím obrázku.
10
Obr. 4-3 Mechanismus cookies Tímto způsobem budeme udržovat informaci o přístupu také. Problém může nastat v případě, že klientův internetový prohlížeč bude mít (například z bezpečnostních důvodů) zakázáno používání cookies. Těchto případů je však velice málo, jelikož cookies nepředstavují žádné bezpečnostní riziko (jsou to pouze textové soubory). Mnohem závažnější problém je ale v tom, že nejrozšířenější internetový prohlížeč současnosti (Internet Explorer 6) implicitně nepovoluje ukládání tzv. cizích cookies. Cizí cookie je cookie, kterou se pokouší uložit objekt, který je do dané webové prezentace vložen a pochází z jiné domény než samotná webová prezentace. Na udržení informace v cookies se tedy nelze zcela spolehnout. Jinou obecně používanou možností jak rozlišit klienty je IP adresa počítače. Tuto adresu máme možnost zjistit vždy a stačí ji tedy společně s časem evidovat u každého přístupu v databázi. Při dalším přístupu z této IP adresy dojde k porovnání času a pokud je rozdíl větší než definovaný interval jedná se o návštěvu, jinak jde o zobrazení. bohužel i zde narážíme na závažný problém. Ne každý počítač má vlastní veřejnou IP adresu. Typicky jsou to lokální sítě připojené k internetu přes společnou bránu na které je provozován překlad adres. Všechny počítače za touto bránou (a mohou jich být stovky) se navenek jeví pod jedinou IP adresou, adresou brány. Ukazuje to následující obrázek.
11
Obr. 4-4 Připojení lokální sítě k Internetu Dva různé počítače uvnitř takovéto lokální sítě, které zároveň navštíví webovou prezentaci s naším počítadlem tedy vytvoří pouze jednu návštěvu a jedno zobrazení namísto dvou návštěv. Tento fakt bohužel nelze nijak ovlivnit a řeší se kompromisem. Definuje se další časový interval (řádově desítky minut), a ten se aplikuje na přístupy z počítačů, které nemají uloženou cookie. Toto kompromisní řešení má dva důsledky. Několik počítačů uvnitř lokální sítě přistupujících zároveň na webovou prezentaci s počítadlem vytvoří jednu návštěvu a příslušné množství zobrazení. Naopak jediný počítač, který přistoupí na tuto prezentaci opakovaně po době delší než popsaný interval, vytvoří namísto zobrazení novou návštěvu. V praxi se používá kombinace cookies a kontroly IP adresy. Z výše popsaných principů vyplývá, že sledování návštěvnosti metodou vkládání externího objektu na webovou prezentaci není zcela přesné, jelikož je částečně založeno na kompromisu. Podotýkáme, že tento druh počítadla není navržen pro zpravodajské servery, diskusní servery apod., nýbrž zejména pro statické webové prezentace a menší webové aplikace. U těchto webových prezentací běžně nedochází k tak extrémním situacím, že by na ně přistupovalo zároveň několik počítačů z lokální sítě. Také není příliš běžné, že by jeden uživatel navštívil stejnou webovou prezentaci několikrát za den. Možná není přesné abychom hovořili o uživateli, jelikož vlastně nerozlišujeme uživatele ale počítač. Nemůžeme totiž vědět, kolik uživatelů daný počítač má.
12
Dva uživatelé jednoho počítače, kteří nezávisle na sobě přistoupí na stejnou webovou prezentaci, vytvoří jednu návštěvu a jedno zobrazení namísto dvou návštěv. Není v našich silách toto rozlišit. Proto budeme i nadále používat slovo uživatel.
4.3. Naše řešení počítadla Naše počítadlo přístupů využívá výše popsané principy. Dále jsme si všimli, že některé brány oddělující lokální síť od internetu dávají k dispozici také lokální adresu na kterou provádějí překlad (Proxy servery). Je-li tato neveřejná adresa k dispozici, tak ji využijeme pro rozlišení počítače. Snažíme se tedy v cookie zaznamenat informaci o tom, že tento internetový prohlížeč navštívil danou webovou prezentaci. Jelikož budeme poskytovat počítadla prakticky libovolnému počtu webových prezentací a velikost jedné cookie je omezena, mohlo by se v extrémním případě stát, že daný internetový prohlížeč navštíví tolik webových prezentací s našimi počítadly, že se data do cookie nevejdou. Navíc cookie je neustále odesílána na server a to by zbytečně zatěžovalo internetové připojení. Neukládáme tedy do cookie informaci o každé navštívené webové prezentaci, ale pouze určitý unikátní identifikátor uživatele. Provádíme to vždy, když jej neobdržíme z cookie a spolu s ostatními zjištěnými informacemi jej ukládáme do databáze. To že jsme identifikátor uživatele neobdrželi v cookie může být ze dvou důvodů. Prvním je, že se jedná o návštěvu (cookie jsme doposud neuložili, nebo vypršela její doba života a byla smazána). Druhá možnost je, že se jedná o zobrazení, ale webový prohlížeč neumožňuje cookie uložit (nebo ji uživatel odstranil). Tyto dvě situace od sebe bohužel nedokážeme rozeznat. Pro jistotu se tedy zjistí IP adresa a porovná se s uloženými záznamy, které nejsou starší než určitý časový interval (v našem případě 30 minut) a patří k dané webové prezentaci. Je-li takový záznam nalezen jedná se o zobrazení a v opačném případě o návštěvu. Pokud identifikátor uživatele v cookie obdržíme, vyhledáme v databázi poslední záznam s tímto identifikátorem, náležející k dané webové prezentaci a pokud je mladší než jeden den jedná se o zobrazení, v opačném případě o návštěvu. Když takový záznam nenalezneme, znamená to, že cookie uložilo naše počítadlo umístěné na jiné webové prezentaci a jedná se tudíž o návštěvu. Při každém přístupu je cookie uložena bez ohledu na to, zda již existovala nebo ne. Doba života se jí nastaví na jeden den a je v ní uložen pouze identifikátor uživatele. Tento identifikátor získáme z příchozí cookie, nalezením záznamu v databázi nebo jej vygenerujeme (musí však být unikátní).
13
4.4. Informace od klienta Kromě počítání přístupů má naše počítadlo za úkol zjistit co nejvíce informací od klienta. Tyto informace se ukládají do databáze a později se vyhodnocují v podobě statistik. Prozatím máme k dispozici informace, zda se jedná o návštěvu nebo zobrazení a okamžik, kdy k přístupu došlo. Můžeme tedy vytvořit následující statistiky vztažené k jednotlivým webovým prezentacím za určitá období: •
Počet návštěv
•
Počet zobrazení
•
Počet uživatelů online
•
Denní návštěvnost
•
Hodinovou návštěvnost
•
Čas posledního přístupu
•
Počet unikátních IP adres
Některé přístupy však do statistik návštěvnosti zahrnovat nemůžeme. Jedná se o přístupy indexovacích robotů. Většina těchto robotů nestahuje obrázky a tudíž žádné přístupy nevytvoří, někteří však ano. Detekci robota provedeme během rozeznávání typu prohlížeče. Každý (slušný) internetový prohlížeč se webovému serveru na němž je umístěna požadovaná webová prezentace identifikuje zasláním nějakého textového řetězce, který jej popisuje. Tento řetězec obsahuje mimo typu a verze internetového prohlížeče také typ a verzi operačního systému na kterém je provozován. Z tohoto řetězce je tedy možné získat dvě další důležité informace. Stejně tak se identifikuje indexovací robot, takže je možné jej odhalit a vyřadit ze statistik. Způsob jakým získáváme informace z tohoto řetězce bude popsán v části implementace. Další informaci, kterou můžeme získat přímo od klienta je tzv. referrer. Referrer je textový řetězec, obsahující adresu webové prezentace odkazující na současnou stránku. Je zde tedy dostupná informace odkud návštěvník přišel. Jelikož je referrer zjišťován ve skriptu, který generuje obrázek počítadla, nezískáme adresu skutečného referrera, ale adresu stránky webové prezentace, ne které je počítadlo umístěno. Mohlo by se zdát, že je to informace bezcenná, ale je tomu právě naopak. Můžeme totiž zjistit, zda je počítadlo skutečně
14
umístěno na webové prezentaci, ke které je registrováno. Navíc zjistíme aktuální stránku webové prezentace. Tyto informace poslouží k následujícím statistikám: •
Nejvíce navštěvované stránky webové prezentace
•
Roboty nejčastěji indexované stránky webové prezentace
Poslední informaci, kterou můžeme získat za určitých okolností přímo od klienta je doména nejvyšší úrovně. Jelikož víme IP adresu počítače, pokusíme se ji přeložit na DNS jméno. Pokud se to podaří vezmeme si z něho doménu nejvyšší úrovně. Překlad se velmi často nepovede z důvodu, že k zjištěné IP adrese DNS záznam neexistuje.
4.5. Informace předané JavaScriptem Velice důležitá data získatelná ze skutečného referrera jsou pro nás bohužel nedostupná. Skutečný referrer je totiž k dispozici stránce na níž je počítadlo umísněno, nikoliv počítadlu samotnému. Možnost jak skutečného referrera, a další zajímavá data, předat počítadlu nám dává skriptování na straně klienta. Skriptovacím jazykem je v našem případě JavaScript. Snad všechny dnešní internetové prohlížeče podporují skriptování pomocí JavaScriptu. Někteří uživatelé však mají z bezpečnostních důvodů tuto funkcionalitu zakázánu, nebo omezenu. Většinou však tomu tak není. Jak již bylo napsáno, počítadlo je na webovou prezentaci vkládáno jakožto generovaný obrázek. Můžeme tedy skriptu, který tento obrázek vytváří, předat nějaké řídící informace při jeho volání v url. Docílíme toho pomocí JavaScriptu. JavaScriptem zjistíme následující informace: •
Skutečný referrer
•
Rozlišení monitoru
•
Barevnou hloubku
Následující obrázek demonstruje ve které fázi vytváření výsledné webové prezentace je použit JavaScript pro předání infomací od klienta.
15
Obr. 4-5 Předání informací JavaScriptem Skutečný referrer obsahuje mnoho zajímavých dat. Můžeme zjistit odkud na danou prezentaci uživatelé nejčastěji chodí, kde všude jsou umístěny odkazy na ni, co lidé vyhledávali než na ni přišli. Vše co z referrera můžeme zjistit shrnuje následující seznam: •
Typ přechodu. Jedná-li se o přímý přístup zadáním adresy, mezistránkový přechod nebo přechod z jiného webu
•
Je možné odhalit internetový vyhledávač a hledanou frázi
•
Obecný referrer
Je-li referrer prázdný jedná se o přímý přístup, neboli že byla adresa webové prezentace zadána přímo. V případě mezistránkového přechodu obsahuje referrer adresu sledované webové prezentace. Jestliže v referreru nalezneme adresu internetového vyhledávače (google.com, seznam.cz,…), můžeme zjistit také hledanou frázi. V ostatních případech zjistíme adresu webu odkud návštěvník přišel. Způsob zjištění jejího zjištění bude popsán v části implementace.
16
4.6. Způsob uložení dat Jak již bylo řečeno budeme pro ukládání získaných dat používat databázi. V našem případě to bude databáze MySQL. Její hlavní výhodou je plná podpora od skriptovacího jazyka PHP, velmi dobrý výkon i při velkém zatížení a hlavně cena. Celá aplikace bude využívat pouze jednu databázi pro všechna počítadla. Struktura databáze bude navržena tak, aby neobsahovala žádná redundantní data. To znamená že informace o přístupu bude jako jeden záznam v tabulce přístupů, ale jedinými přímo zadanými údaji bude čas přístupu a IP adresa, ostatní zjištěné informace budou referencovány prostřednictvím cizích klíčů z ostatních tabulek.
4.7. Návrh webové aplikace Podpůrná webová aplikace je vlastně jakýsi katalog registrovaných počítadel s možností zakládat nová počítadla. Jejím hlavním úkolem je prezentace získaných dat z přístupů na jednotlivé webové prezentace. 4.7.1. Rozvržení – Layout Při tvorbě webových prezentací se dodržují určitá nepsaná pravidla pro rozvržení stránky. Většina webových prezentací se skládá ze tří základních částí. První je část pro navigaci, reprezentovaná nejčastěji formou nějakého menu. Další částí je samotný obsah stránky. A třetí část obsahuje například kontextové odkazy, reklamu, vyhledávací formulář apod. Nejčastěji je na webu k vidění rozložení stránky s navigační částí v horní části nebo vlevo. Obsahová část zabírá největší plochu stránky a třetí část je umístěna po pravé straně. Naše webová prezentace se bude tohoto standardu držet a všechny stránky budou dodržovat rozložení jako na obrázku. V horní části bude logo aplikace a menu přizpůsobené konkrétní situaci. V levé části bude navigační menu, vprostřed obsah a po pravé straně sloupec s vyhledávacím formulářem a žebříčky návštěvnosti. V pravé části se může v budoucnu umístit také reklama.
17
Obr. 4-6 Rozložení webové prezentace Abychom docílili toho rozložení můžeme využít tří způsobů tvorby layoutu. První možností je rozložení stránky na rámy (framy), ale to už se dnes téměř nepoužívá. Takto vytvořené webové prezentace mají špatnou konzistenci, obtížně se na ně odkazuje a jiná zařízení (PDA apod.) mají problémy s jejich korektním zobrazením. Druhá možnost je použití tabulek. To však odporuje dnešnímu trendu oddělit obsah od formy. Tabulky totiž mají primární úlohu v zobrazování tabulkových dat a nikoli v tvorbě layoutu. Poslední možností je využití CSS pozicování. Rozhodli jsme se vytvořit layout pomocí CSS pozicování. Docílíme tím oddělení obsahu od formy a čitelnějšího HTML kódu. Pouhou změnou předpisu stylů můžeme měnit nejen vzhled prezentace co se týče formátování textu, ale i samotné rozložení na stránce (layout). 4.7.2. Obecný vzhled stránek Zde popíšeme ty části, které jsou společné všem stránkám prezentace, nebo se jen minimálně mění. V levé části stránek se nachází navigační menu, pod ním informace o verzi aplikace a kontakt na správce a ještě níže pak globální počítadlo zobrazující součet stavů všech registrovaných počítadel. Po kliknutí na něj, stejně jako po kliknutí na odkaz z navigačního menu (globální statistiky), se otevře stránka s globálními statistikami (statistiky přes všechna registrovaná počítadla). V horní části je menu, které se přizpůsobuje aktuálnímu stavu aplikace. Například je-li přihlášen uživatel, tak přibude možnost odhlásit se apod. V pravém sloupci se nachází formulář pro vyhledávání v registrovaných počítadlech a pod ním žebříčky návštěvnosti. Tyto žebříčky zobrazují nejvíce navštěvované stránky a kategorie za předešlý den.
18
4.7.3. Stránky prezentace Prezentace bude rozdělena do několika stránek. Hlavní stránka (úvodní) bude realizovat vlastní katalog. V její horní části bude výpis kategorií. A pod nimi seznam počítadel umístěných v aktuální kategorii. Po kliknutí na kategorii se přejde do příslušné kategorie, vypíše se seznam podkategorií a seznam počítadel v této kategorii. Kategorie tedy budou tvořit stromovou strukturu. Seznam počítadel v kategorii může být příliš dlouhý, v tom případě bude odstránkován. Stránkování bude umístěno pod výpisem počítadel. Počítadla ve výpisu budou odkazovat na stránku s detailem počítadla. Zde se zobrazí informace o počítadle. Jeho název, popis, kdy bylo registrováno, odkaz na webovou prezentaci ke které je registrováno a souhrnné statistiky přístupů a shlédnutí. Ve spodní části detailu počítadla bude odkaz na podrobné statistiky. Ty mohou být chráněny heslem, takže může být nejprve zobrazen formulář pro přihlášení. Podrobné statistiky budou implicitně počítány pro aktuální den. Pro změnu období, za které se budou statistiky počítat bude v horní části stránky k dispozici kalendář, pro přesné zadání období zde bude také formulář. Statistiky budou zobrazovat data specifikovaná v části „analýza“ ve formě sloupcových grafů. Pro registraci, případně editaci počítadla bude sloužit stránka s editačním formulářem. Dále bude k dispozici stránka přihlašovacího formuláře a formuláře pro změnu hesla. 4.7.4. Obecná funkcionalita formulářů Při vkládání dat do databáze pomocí formulářů je třeba tato data nejdříve zkontrolovat. Například aby datum bylo ve správném formátu. Pokud se očekává číslo, aby nebylo možno vložit řetězec znaků a naopak. Je třeba také chránit databázový systém před vložením škodlivého kódu (tzv. SQL hack). Kontrola každého formuláře proběhne ve dvou krocích. Před odesláním formuláře pomocí JavaScriptu a po odeslání na server přímo internetovou aplikací. Kontrola pomocí JavaScriptu má výhodu v tom, že se odehraje na klientském počítači a zbytečně se neposílají data na sever. Tato kontrola však může selhat (prohlížeč nepodporuje JavaScript) a proto je bezpodmínečně nutné kontrolovat vstupní data i na serveru. Kontrola zahrnuje, zda jsou vyplněna všechna povinná pole, zda jsou vyplněny správné hodnoty a jestli se někdo nepokouší spustit v databázi vlastní SQL. Na serveru probíhají ještě další kontroly, které na klientu provést nelze (například unikátní klíč v databázi apod.). Schéma odeslání formuláře na server je na následujícím obrázku.
19
Obr. 4-7 Kontrola dat z formuláře Pole formuláře, která je nutno vyplnit jsou vždy označena. Pokud kontrola odhalí nějaký nedostatek, musí zůstat formulář vyplněn a uživateli je oznámeno, které pole je nesprávně vyplněno. O navrácení hodnot do formuláře při nesprávném vyplnění se stará mechanismus postbacku. Princip ochrany databáze před SQL hackem bude popsán v implementaci. 4.7.5. Nastavení aplikace Při nasazování aplikace do provozu je třeba nastavit určité parametry. Zejména je to připojení k databázi (databázový server, uživatel, heslo a jméno databáze). K tomu účelu bude existovat jeden soubor, kde bude možno tyto údaje měnit. V tomto souboru bude též možno změnit verzi aplikace, kontaktní emaily, název serveru a jeho webovou adresu apod. Další nastavení se týkají zobrazovaných informací. Jsou to zejména počet počítadel na stránku při výpisu kategorie, kolik bude v jednotlivých statistikách zobrazeno položek, jak dlouhé mohou být zobrazované řetězce apod.
5. Implementace V této části bychom se podrobněji podívali na řešení určitých specifických problémů popsaných v části návrh.
5.1. Identifikace prohlížeče Jak již bylo popsáno, každý (slušný) internetový prohlížeč se webovému serveru identifikuje určitým řetězcem. Tomuto řetězci se říká Browser-ID a v PHP jej máme automaticky k dispozici v serverové proměnné HTTP_USER_AGENT.
20
Z tohoto řetězce můžeme zjistit mimo typu a verze internetového prohlížeče také typ a verzi operačního systému. Může mít například následující tvar: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; Creative) Je zde patrno, že se jedná o MS Internet Explorer verze 6 a provozován je na operačním systému MS Windows 98. Způsob jak z tohoto řetězce získat tyto informace nám nabízí technika regulárních výrazů. Jelikož databáze MySQL přímo podporuje použití regulárních výrazů v SQL dotazech, tak nám nic nebrání v tom si v tabulce prohlížečů nadefinovat příslušné regulární výrazy pro internetové prohlížeče a operační systémy a provést SQL dotaz. Tabulka s definicí internetových prohlížečů vypadá následovně. Sloupec Typ x04id int(11) x04Name text x04Regexp text x04Order int(11) Tab. 5-1 x04Browser – definice prohlížeče Tabulka je naplněna dafinicemi regulárních výrazů pro jednotlivé internetové prohlížeče. Sloupec x04Name obsahuje název, x04Regexp příslušný regulární výraz a x04Order pořadí pro vyhodnocení. SQL dotaz, kterým zjistíme o jaký prohlížeč se jedná má následující podobu: SELECT x04id FROM x04browser WHERE 'řetězec Browser-ID' REGEXP x04regexp ORDER BY x04order LIMIT 0,1 Sloupec x04Order je důležitý pro rozlišení verzí internetových prohlížečů. Například regulární výraz prohlizec.1 musí mít vyšší hodnotu než výraz prohlizec.10, jinak bychom nemohli tyto prohlížeče rozlišit. Kompletní databázové schéma je přiloženo v příloze. Analogicky zjistíme typ a verzi operačního systému. Přehledný seznam řetězců Browser-ID je možno nalézt zde [1]. Předtím než zjišťujeme internetový prohlížeč a operační systém provedeme kontrolu, zda se nejedná o robota. Opět máme podobnou tabulku s regulárními výrazy pro roboty a postup je stejný.
21
5.2. Identifikace webu Předtím, než začneme započítávat přístupy, musíme zjistit jestli je počítadlo opravdu umístěno na webu ke kterému je registrováno (při registraci počítadla je nutné zadat adresu webu právě z tohoto důvodu). To zjistíme z referrera, který je v PHP v serverové proměnné HTTP_REFERER. Postup je podobný jako při zjišťování typu internetového prohlížeče. Při registraci webu je však nutno adresu zformátovat do jednotného tvaru. Uživatelé totiž mohou adresu zadat několika způsoby a navíc ještě kombinovat velká a malá písmena: http://www.web.cz/ http://www.web.cz http://web.cz WWW.WEB.CZ www.web.cz web.cz Pro sjednocení použijeme před uložením do databáze takovéto regulární výrazy: $x01url = eregi_replace("^http://", "", adresa); $x01url = eregi_replace("/$", "", $x01url); $x01regexp = eregi_replace("^www\.", "", $x01url); Výsledkem těchto operací bude poslední možnost z uvedeného seznamu.
5.3. Vyhledávače a hledané fráze Nejprve je potřeba zjistit, že se jedná o vyhledávač. Pomocí JavaScriptu jsme obdrželi skutečného referrera (adresu odkud jsme přišli). Podrobíme-li tento řetězec PHP funkci parse_url, získáme asociativní pole jehož jednou hodnotou je název serveru (host). Pokud se podíváme na výsledek hledání nějakého řetězce určitým vyhledávačem zjistíme, že hledaná fráze se objeví v url. Například, když pomocí vahledávače google vyhledáme frázi „pocitadlo“, nalezneme v url toto: http://www.google.com/search?hl=cs&q=pocitadlo&lr= V proměnné q je hodnota hledané fráze. Většina prohlížečů používá tento systém (jen se ta proměnná jmenuje někdy jinak). Stačí tedy mít opět definovanou tabulku vyhledávačů s příslušnými jmény proměnných. A potom jednoduchým zpracováním řetězce získáme hledanou frázi.
22
Problémy nám však může způsobit kódování češtiny. Hledaná fráze nemusí být vždy ve stejném kódování jaké používáme my (CP1250). Musíme tedy nejdříve převést znakovou sadu. K tomuto účelu využíváme hotovou funkci Autoczech [2].
5.4. Ochrana před SQL hackem Mnoho internetových aplikací se nezabývá ochranou proti vložení škodlivého kódu do formuláře pracujícího s databází. Základem ochrany databáze je zabránit útočníkovi ve zjištění struktury tabulek. Při chybě databáze se nesmí nikdy vypsat SQL. Pokud útočník zná strukturu databáze, může se pokusit o SQL hack. Ten spočívá ve vložení SQL kódu například do vyhledávacího formuláře. Pokud útočník zadá do formuláře takovýto kód: ´;DELETE * FROM USERS-do databáze se pošle takovéto SQL: SELECT * FROM tabulka WHERE sloupec=´´;DELETE * FROM USERS--´ AND... Provedou se tedy obě SQL a útočník způsobí nedostupnost aplikace. PHP obsahuje mechanismus tzv. magických uvozovek. Pokud jsou zapnuty, tak veškeré proměnné z formulářů (GET, POST) a cookie budou ošetřeny vložením zpětného lomítka před uvozovky a apostrofy, čímž se zruší jejich význam v SQL. My však nemůžeme předpokládat že jsou zapnuty. Ani vlastně nechceme aby se tak dělo, jelikož při vrácení formuláře z důvodu špatně vyplněných údajů nechceme, aby se zpětná lomítka objevila ve formuláři. Můžeme však zjistit, že zapnuté jsou a při zpracování formulářových dat nejdříve proměnné ošetřit funkcí stripslashes() a zpětná lomítka jim vrátit těsně před dotazem do databáze pomocí funkce addslashes().
5.5. Počítadla v kategoriích Kategorie v nichž jsou umístěna počítadla tvoří stromovou strukturu. Každá kategorie tedy může mimo počítadel (listů) obsahovat další kategorie (uzly). Při výpisu kategorií požadujeme aby se zobrazil také počet všech počítadel ve všech podkategoriích dané kategorie. Toho bohužel nejsme schopni dosáhnout pomocí obyčejného SQL. Takováto operace vyžaduje rekurzi. MySQL databáze sice umožňuje definici uložených procedur, ale ty nemohou být (na rozdíl třeba od databáze Oracle) rekurzivní. Musíme tedy rekurzi provádět aplikačně.
23
Aplikační rekurze však vyžaduje velké množství přístupů do databáze a mohla by nepříjemně zatěžovat server. Výpis kategorií je totiž umístěn na hlavní stránce a při každém načtení stránky by se musela tato rekurze opakovat. Rozhodli jsme se použít Pear komponentu Cache Lite [3]. Tato komponenta umožňuje vygenerovat část HTML kódu a uložit ji do souboru. Při požadavku na zobrazení se tedy negeneruje kód, ale načte se ze souboru. Stejným způsobem jsme řešili také žebříčky nejvíce navštěvovaných webů a kategorií. Jelikož tyto žebříčky zobrazují stav za předchozí den, stačí je vygenerovat pouze jednou denně.
6. Testování Testování aplikace probíhalo soustavně během celého vývoje. Z počátku bylo počítadlo k dispozici pouze jako sběrač dat a bylo umístěno na několika webových prezentacích. Postupně byly přidány statistiky a následně zbytek podpůrné aplikace a bylo již možno registrovat nová počítadla přímo z aplikace. Testování probíhalo zhruba tři měsíce. Během této doby si zaregistrovalo několik lidí své soukromé webové prezentace, ale i firemní stránky. Téměř všichni využívají naše počítadlo stále. Některá funkcionalita byla přidána na jejich popud. Žádné negativní ohlasy jsme nezaznamenali. Během testovaní jsme zjistili, že je problém s odezvou aplikace. Zejména nepříjemná byla doba generování obrázku počítadla, způsobující pomalé načítání webové aplikace na níž bylo naše počítadlo umístěno. Tento problém se vyřešil přechodem na placený hosting. Požádali jsme několik lidí využívajících naše počítadla pro sledování návštěvnosti svých webů o krátké hodnocení. Tato vyjádření jsou přiložena v příloze.
7. Závěr Myslíme si, že se nám podařilo vytvořit plnohodnotné a konkurenceschopné počítadlo přístupů. Jistě se nemůžeme srovnávat s počítadly typu TOPlist [4], která mají k dispozici velice výkonné databázové a webové stroje a není pro ně problém zpracovat miliony přístupů denně. My máme pro statistiky podstatně menší vzorek dat. Pokud však porovnáme naměřené hodnoty z globálních statistik zjistíme, že se velmi podobají výsledkům statistik TOPlistu. Na poli internetových prohlížečů jasně dominuje Internet Explorer 6 a za ním se pomalu blíží Firefox. V kategorii operačních systémů jasně vítězí Microsoft, především Windows XP. Nikoho také nepřekvapí, že nejpoužívanějším
24
rozlišením monitoru je dnes 124x768 s barevnou hloubkou 32b. Mezi vyhledávači vévodí seznam.cz a google.
7.1. Budoucí práce Jelikož naše aplikace postrádá možnost přímé administrace a spoléhá tedy na zkušenosti správce a produkty třetích stran, bylo by vhodné doplnit aplikaci o možnost správy. V současné době také není možné aby vlastník počítadla změnil kategorii v níž je počítadlo registrováno (musí požádat správce). Dalším možným vylepšením je možnost nastavení vzhledu počítadla. Většině webových prezentací totiž nebude jistě vyhovovat současné barevné ztvárnění.
25
8. Seznam literatury [1] Řetězce Browser-ID . http://www.zytrax.com/tech/web/browser_ids.htm.
[2] Funkce Autoczech . http://radekhulan.cz/item/autoczech-php-vojtechasemeckeho.
[3] Pear, Cache Lite . http://pear.php.net/package/Cache_Lite.
[4] TOPlist . http://toplist.cz.
[5] phpMyAdmin . http://www.phpmyadmin.net/home_page/index.php.
[6] J. Castagnetto, H. Rawat, S. Schumann, C. Scollo, D. Veliah. PHP Programujeme profesionálně. Computer Press. s.r.o., Praha 2002 [7] Milan Šimůnek. SQL kompletní kapesní průvodce. GRADA Publishing s.r.o., 1999 [8] Rastislav Škultéty. JavaScript programujeme internetové aplikace. Computer Press. s.r.o., Praha 2001 [9] Petr Staníček. CSS Kaskádové styly. Computer Press. s.r.o., Brno 2003
26
A. Snímky obrazovky Úvodní obrazovka aplikace vypadá následovně. Vypsané informace jsou závislé na aktuálních datech v databázi.
Ukázka zobrazení statistik ve formě sloupcových grafů. Toto jsou grafy globálních statistik, které zahrnují všechna počítadla za zvolené období.
27
Na dalším obrázku je formulář pro registraci nového počítadla. Formulář pro změnu parametrů registrovaného počítadla je velmi podobný.
Samotné počítadlo, které je vkládáno na registrované weby a zajišťuje sledování návštěvnosti vypadá následovně.
28
B. Databázové schéma
29
C. Vyjádření uživatelů Počítadlo @udit, které mám na svých webových stránkách, mi vyhovuje z několika důvodů. Jedním z nich je přehlednost. Na první pohled je patrné, jak vysoká je návštěvnost stránek, aniž bych musel někde dlouho pátrat. Protože webové stránky, které obstarávám, si nedělají nároky na každodenní trhání rekordů, velmi mi vyhovuje zveřejněný počet přístupů např. za jeden týden, což tak zhruba odpovídá intervalu aktualizace. Toto hledisko je pro mě důležité, protože stránky jsou víceméně určeny předem danému okruhu návštěvníků. Velmi se mi líbí i design počítadla, který je jednoduchý a přitom na pohled příjemný. Užitečný a dobře zpracovaný je i detailní přehled, který mi nabízí možnost spravovat webovou prezentaci s ohledem na nejnavštěvovanější stránky a odkazy. Práce je to opět velmi jednoduchá a přehledná. Nevyužívám však všechny funkce počítadla, které zjevně nabízí mnohem víc, zejména pro ty, kteří spravují stránky s častější aktualizací. Např. zobrazení přístupu po hodinách je pro mě spíše zajímavostí, ale myslím, že provozovatelé jinak orientovaných stránek mohou této i dalších funkcí počítadla využít mnohem lépe. Michal Šíma Počítadlo jsem si umístila na své osobní stránky. Chtěla jsem vědět, kolik lidí denně je shlédne. Toto počítadlo mi ale nabídlo mnohem víc. Nejdříve jsem si myslela, že statistické údaje nevyužiji. Záhy jsem ale s povděkem sledovala uváděné informace. Kromě počtu přístupů, které byly hlavním důvodem instalace počítadla, nyní celkem pravidelně sleduji především to, které stránky jsou navštěvované nejvíce. Také ráda sleduji domény, neboť mám pár přátel v cizině. Spokojený uživatel. Květa Hřebíková Se statistikami od audit.fridgy.net jsem velmi spokojený. Přehledně vidím návštěvnost a mohu podle ní přizpůsobovat změny stránek. Také vidím, jestli se zvedla návštěvnost při nových akčních nabídkách, nebo akční nabídky nepřitáhly mnoho klientů a tím byly neúspěšné. Podrobné statistiky sleduji přibližně ob den a budu je sladovat i nadále. Ondřej Wolf Umístili jsme si Vaše počítadlo na naše stránky, abychom zjistili návštěvnost a jelikož jsme realitní společnost, kde bývá obrovská konkurence, tak je v našem zájmu sledovat kolik lidí shlédne ať už denně nebo týdně naše webové stránky. A audit.fridgy.net nám dává jasný přehled o celkovém počtu návštěvníků za
30
různá období. Jelikož máme realitní inzerci umístěnou i na jiných serverech, je pro nás zajímavé sledovat prostřednictvím referrera příchody z těchto serverů. Martin Kovalík Provozujeme stránky nabízející ubytování. Počítadlo nám o návštěvnících přineslo celou řadu informací. Kromě statistik počtu uživatelů, se nám velmi hodí seznam frází, které uživatelé do vyhledávače vložili. Klíčová slova, která na našich stránkách chyběla, jsme doplnili. Dále jsme zjistili, že naše stránky navštěvuje i větší počet uživatelů z Polska. Již dříve jsme o překladu do polštiny uvažovali. Nyní máme pádný důvod to neodkládat. Aleš Nosek
31
D. Pokyny pro instalaci V první řadě je nutno podotknout, že aplikace je v podstatě nepřenosná co se týče webové adresy. Je to dáno tím, že na sledované webové prezentace je umísťován obrázek který generujeme a je tudíž umístěn na našem webu. Je tedy zapotřebí se dobře rozhodnout o adrese aplikace, než ji začnou klienti využívat. Instalace spočívá ve zkopírování obsahu adresáře web na webový server, vytvoření databáze a nakonfigurování aplikace. Adresář cache slouží pro ukládání vygenerovaného HTML a proto musí mít nastavena příslušná práva pro zápis. Pro vytvoření struktury tabulek v databázi je připraven instalační skript db.sql. Jedná se o SQL dump z aplikace phpMyAdmin [5]. Nakonfigurování aplikace se provádí pomocí souboru nastaveni.inc. Jednotlivé možnosti nastavení jsou popsány přímo pomocí komentářů v daném souboru. Jedná se zejména o nastavení připojení k databázi, webové adresy aplikace, kontaktních e-mailů atp.
32
E. Pokyny pro správu Správa aplikace se provádí pomocí editace záznamů v tabulkách. Vhodným nástrojem je například phpMyAdmin [5], který bývá součástí každého hostingu s PHP a MySQL. V databázi existuje jedna redundantní tabulka overall, obsahující ke každému záznamu o přístupu (x03access) kompletní zjištěné informace před zpracováním regulárními výrazy apod. Ta je zde z důvodu případné opravy a rekonstrukce špatně analyzovaných údajů. Jelikož tato tabulky rychle narůstá, je vhodné ji čas od času vyprázdnit (exportovat do souboru). Zrušení počítadla se provádí nastavením hodnoty 0 ve sloupci x01active v tabulce x01web. Nedojde tedy ke smazání počítadla, ale pouze se zabrání jeho zobrazení v kategorii a přístupu k němu. Přidání kategorie docílíme vložením nového záznamu do tabulky x02Catalog. Důležité je správné nastavení hodnoty ve sloupci x02idup, které referencuje nadřazenou kategorii. Pokud chceme vytvořit kategorii v kořeni, musíme hodnotu x02idup nastavit na 0. Změnu nadřazené kategorie provedeme opět editací hodnoty x02idup v příslušné podkategorii. Definice internetového prohlížeče je složitější záležitost, jelikož vyžaduje znalost příslušního Browser-ID prohlížeče a práce s regulárními výrazy. Pokud máme regulární výraz popisující daný prohlížeč, vložíme jej do tabulky x04browser. Důležitá je hodnota ve sloupci x04order, jak bylo popsáno v implementaci. Podobným způsobem je možno nadefinovat také nový operační systém a indexovacího robota. Definice vyhledávače spočívá ve vložení záznamu do tabulky s01searchengine. Předtím však musíme zjistit do jaké proměnné příslušný vyhledávač vkládá hledanou frázi, jak bylo popsáno v implementaci. Doména nejvyšší úrovně se nadefinuje přidáním záznamu do tabulky x07domain. Podobně se nadefinuje případné nové rozlišení obrazovky (x09resolution) a barevná hloubka (x08colordepth). Za zmínku stojí také tabulka bannedip obsahující definice zakázaných IP adres, tj. adres, které negenerují žádné přístupy.
33
F. Obsah přiloženého CD html/
- dokumentace k projektu abstract.html
- krátký abstrakt v češtině a angličtině
zadani.html
- zadání bakalářské práce
text/
- adresář obsahující texty bakalářské práce bp.doc
- zdrojový formát textu
bp.pdf
- tisknutelná forma textu
src/
- zdrojové texty webové aplikace
index.html
- výchozí stránka projektu
install.txt
- pokyny pro instalaci a požadavky na HW, SW
readme.txt
- základní informace
34