Grafika publishing webtip.cz grafika.cz mujiPod.cz mujmac.cz fotografovani.cz printing.cz builder.cz galerie
webtip.cz
adresář  | práce  | diskuse  | redakce  | inzerce
 
 


  ASP pro začátečníky, 8.díl - Počítadlo II.
o autorovi 
poslat mailem 
tisknout článek 
aktuální rubrika 
V dnešním díle návštěvníkovi webové stránky zamezíme, aby stiskem klávesy F5 uměle zvyšoval stav počítadla.

Liška Adam - 15.05.2002 - clanek - Rubrika: ASP
Předchozí díl: ASP pro začátečníky, 7. díl - Počítadlo návštěvníků
Seriál: 
Následující díl: ASP pro začátečníky, 9. díl - Počítadlo aktivních uživatelů

V předchozím díle jsem popsal základní funkci počítadla - udržovat informaci o počtu zobrazení určité webové stránky.

Dnes po počítadlu budeme chtít, aby při jednom připojení evidovalo návštěvníka pouze jednou, i když ji navštívil několikrát. Jak to ale udělat?

Určitě si říkáte, že nejlehčí by to bylo, kdybychom mohli návštěvníka nějak identifikovat. V tom však tkví základní problém. Webový server totiž neví, kdo jste, ani když posíláte požadavek po druhé - tato informace se s HTTP hlavičkou neposílá.

Active Server Pages tento problém řeší pomocí objektu Session. Objekt Session vytvoří návštěvníkovi cookie, které jej jednoznačně identifikuje.

Pokud tedy budete chtít na svém webu udržovat informace o návštěvníku (jméno,...), použijte objekt Session. Informace v něm uložené jsou dostupné jen jednomu uživateli, jen v aplikaci, ve které byly vytvořeny, a jen při jednom připojení. Aplikace se v ASP chápe jako souhrn všech souborů v jednom virtuálním adresáři a jeho podadresářích. Nedoporučuje se do objektu Session ukládat mnoho informací, protože tak zbytečně zatěžujete server.

Objekt Session se vytvoří prvním uložením nějaké informace. Po uplynutí 20 minut, kdy návštěvník s aplikací nekomunikuje (což je základní nastavení, které lze samozřejmě měnit), se objekt zruší.

A nyní již přejdeme k tvorbě samotného kódu. Počítadlo zatím vypadá takto:

Set fso = Server.CreateObject("Scripting.FileSystemObject")
cesta = Server.MapPath("\pocitadlo.txt")

If fso.FileExists(cesta) Then
Set soubor = fso.OpenTextFile(cesta, 1)
cislo = Clng(soubor.ReadLine)
cislo = cislo + 1
soubor.Close
Set soubor = fso.OpenTextFile(cesta, 2)
soubor.WriteLine(cislo)
soubor.Close
Response.Write cislo
Else
Set soubor = fso.OpenTextFile(cesta, 2, true)
soubor.WriteLine("1")
response.write "1"
soubor.close
End If

set fso = Nothing

Při prvním zobrazení stránky návštěvníkem se o shlédnutí uloží do objektu Session informace; při jeho další návštěvě se stav počítadla již nemění. Použijeme přitom příkaz If:

Set fso = Server.CreateObject("Scripting.FileSystemObject")
cesta = Server.MapPath("\pocitadlo.txt")

If fso.FileExists(cesta) Then
Set soubor = fso.OpenTextFile(cesta, 1)
cislo = Clng(soubor.ReadLine)
soubor.Close
If Session("pocitadlo") = "" Then
Session("pocitadlo") = "1"
cislo = cislo + 1
Set soubor = fso.OpenTextFile(cesta, 2)
soubor.WriteLine(cislo)
soubor.Close
End If
Response.Write cislo
Else
Session("pocitadlo") = "1"
Set soubor = fso.OpenTextFile(cesta, 2, true)
soubor.WriteLine("1")
response.write "1"
soubor.close
End If

set fso = Nothing

Návštěvník přicházející na stránku poprvé má proměnnou pocitadlo prázdnou, takže se vykoná kód následující po podmínce If. Při další návštěvě během téhož připojení již nevyhovuje podmínce If, a proto se nic nepřičítá.

Mohlo by se zdát, že máme již celý kód aplikace hotový, ale není tomu tak. Při každé nové návštěvě otevíráme soubor a zapisujeme do něj. Tak ale zbytečně zatěžujeme server. Efektivnější by bylo ukládat informaci do souboru vždy po pěti návštěvách. Při tomto řešení by se soubor otevíral pětkrát méně než dříve a serveru bychom ulehčili. Zásadní problém ale je, jak uchovávat průběžnou hodnotu v rámci celé aplikace?

Od toho je v Active Server Pages objekt Application. Ten uchovává informace dostupné všem návštěvníkům v jedné aplikaci.

Problém však nastává při výpadku serveru, kdy se všechny informace v něm uložené ztratí. My však po pěti návštěvách tyto hodnoty ukládáme do souboru, takže je máme v případě těchto nehod archivované.

Kód tedy trochu pozměníme s použitím objektu Application:

Set fso = Server.CreateObject("Scripting.FileSystemObject")
cesta = Server.MapPath("\pocitadlo.txt")

If fso.FileExists(cesta) Then
Set soubor = fso.OpenTextFile(cesta, 1)
cislo = Clng(soubor.ReadLine)
soubor.Close
If Session("pocitadlo") = "" Then
Session("pocitadlo") = "1"
Application.Lock
Application("navstevniku") = Application("navstevniku") + 1
Application("ulozit") = Application("ulozit") +1
Application.Unlock
If Application("ulozit") = 5 Then
Set soubor = fso.OpenTextFile(cesta, 2)
soubor.WriteLine(Application("navstevniku"))
soubor.Close
Application("ulozit") = 0
End If
End If
Response.Write Application("navstevniku")

Else
Session("pocitadlo") = "1"
Application("navstevniku") = 1
Application("ulozit") = 1
Set soubor = fso.OpenTextFile(cesta, 2, true)
soubor.WriteLine("1")
response.write "1"
soubor.close
End If

set fso = Nothing

Jak vidíte, objekt Application se používá podobně jako objekt Session. Jen při ukládání informací je lepší použít příkazy Application.Lock a Application.Unlock. Ty zabrání tomu, aby dva uživatelé měnili hodnoty globální proměnné (proměnné na úrovni aplikace) najednou, což by pochopitelně zapříčinilo chybu. V kódu máme globální proměnnou ulozit, kterou počítáme, kolik návštěv bylo uskutečněno od posledního uložení. Když se rovná pěti, průběžný součet všech shlédnutí (proměnná nastevniku) se uloží do souboru a proměnná ulozit se nastaví na nulu.

Nyní máme doopravdy již celý kód počítadla hotový. V příštím díle vás seznámím se souborem Global.asa a vytvoříme aplikaci na počítání aktivních uživatelů.

Liška Adam


Hodnocení článku: -1- -2- -3- -4- -5-  Aktuální hodnocení: 2.62 (2623)

Relevantní články
Žádné články


Příspěvky do diskuse o aktuálním článku
zajda29.04.9:45Jak nastavit interval
sco@wo.cz30.06.14:41RE: Jak nastavit interval
  

 

  O vydavateli | Kontakt | Ceník reklamy | Ochrana osobních dat
©2002 Grafika Publishing. Všechna práva vyhrazena!