Visa besöksstatistik med ASP

En enkel statistiksida där du kan se hur många unika besökare du har haft, samt vilka skärmupplösningar de har använt.

De flesta webbhotell håller med någon form av statistik, som gör att du kan anpassa dina hemsidor efter till exempel den skärmupplösning som de flesta besökarna använder.

Men du kan själv skapa en enkel statistiksida som ger dig en del av dessa uppgifter. Du kan lägga statistiksidan dold, så att bara du själv ser innehållet.

Du kan också lägga den synlig så att besökarna ser hur många besök (med unika IP-adresser) du har haft, vilka skärmupplösningar och färgdjup som är vanligast, vilka inställningar han eller hon själv har använt och vilken den aktuella IP-adressen är.

Uppgifterna lagras i en enkel accessdatabas med en enda tabell. Eftersom databasen inte kommer att innehålla några känsliga uppgifter, kan du lugnt lägga den tillsammans med de övriga filerna.

Observera att funktionen kräver tillgång till ASP-server. Filerna kan inte köras på en vanlig server utan ASP.

Filer som du behöver

Du kommer att behöva sammanlagt tre filer - lägg alla tre i samma mapp:

  1. besoksinfo.mdb – databasen där uppgifterna lagras.
  2. index2.asp – den sida som gör det "grundläggande jobbet". Det är den här sidan du kopplar till ditt vanliga ramdokument, om du vill göra statistiksidan osynlig.
  3. start.asp – sidan som visas för besökarna (eller dig när du vill se statistiken). Om sidan skall vara synlig, kan du även lägga annat innehåll på den.
Databasen

Gör en ny databas i Access och spara den som besoksinfo.mdb. Databasen skall innehålla en enda tabell, som du kallar "besoktabell".

I tabellen skapar du sju fält med följande namn och egenskaper. Använd inte större fältstorlek än vad som behövs:

Fältnamn Datatyp
id Räknare – gör detta fält till primärnyckel, inga dubbletter
screen Text – fältstorlek 15
colordepth Text – fältstorlek 5
ip Text – fältstorlek 20
webblasare Text – öka eventuellt fältstorleken till 70
besokdatum Datum/tid
vagenhit Text – öka eventuellt fältstorleken till 70

Spara databasen som besoksinfo.mdb i den mapp där du kommer att lägga de båda andra filerna.

Börja med koden

Besökar/statistiksidorna

Du behöver två ASP-filer. Den första – index2.asp – gör jobbet med att kolla den nya besökaren mot databasen.  Om besökaren kommer för första gången – det vill säga om han har en IP-adress som inte finns i databasen – eller om han har ändrat skärminställning sedan tidigare besök, kommer de nya uppgiferna att läggas till i databasen.

Om däremot besökaren är en "gammal bekant" – så att IP-adressen och den aktuella skräminställningen redan finns, sker inget tillägg till databasen.

Den andra filen – start.asp – visar de uppgifter som finns i databasen. Mer om detta längre ned.

Filen index2.asp

Det här är koden till filen som utför kontrollen mot databasen. En del kodrader är ganska långa, så att de bryts över flera raden här. Kopiera hela koden och klistra in den i en textredigerare, så att du slipper krångel på grund av felaktiga radbrytningar:

<%@Language=VBScript%>
<%Response.Buffer = True%>
<html>
<head>
<title>Registrera skärmupplösning med mera</title>
</head>

<BODY topmargin="0" leftmargin="0" marginheight="0" marginwidth="0">
<%
   Dim screen
   screen = Request.QueryString("screen")
   Select Case screen
   Case "check"
   check
   Case "start"
   start
   End Select
   SUB check
   dim RS, SQL1, SQL2, SDNConn

'Deklarera objekt
   Set SDNConn = Server.CreateObject("ADODB.Connection")
   SDNConn.Open "DBQ=" & Server.MapPath("besokinfo.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"
   set RS = Server.CreateObject("ADODB.Recordset")

'SQL1 för kontroll och SQL2 för infoga
   SQL1 = "SELECT ID FROM besoktabell WHERE ip='" & Request.ServerVariables("REMOTE_ADDR") & "' and screen='" & request.QueryString("swh") & "';"
   SQL2 = "Insert into besoktabell (besokdatum, webblasare, screen, ip, colordepth, vagenhit) VALUES('" & DATE & "', '" & Request.ServerVariables("HTTP_USER_AGENT") & "', '" & request.QueryString("swh") & "', '" & Request.ServerVariables("REMOTE_ADDR") & "', '" & request.QueryString("d") & "', '" & request.Servervariables("URL") & "');"

'Kontrollera om användare finns
   set RS = SDNConn.execute(SQL1)

'Kollar användare och skärmuppgifter,
'för den händelse att användaren ändrar inställningarna
   If Request.ServerVariables("REMOTE_ADDR") = "" and request.QueryString("swh")="" Then
   response.redirect "index2.asp?screen=start"
   End If

'Om SQL1 är tom läggs användarinformationen till
   If RS.eof Then
   SDNConn.execute(SQL2)
   response.redirect "index2.asp?screen=start"
   else
   response.redirect "index2.asp?screen=start"
   end if

'Töm variabler
   RS.close
   set RS = nothing
   SDNConn.close
   Set SDNConn = nothing
   end sub

'---------------------
SUB start
'På adressen nedan läggs innehållet som skall visas på webbsidan
'Sidan kan läggas som osynlig ram tillsammans med de övriga sidorna
'i startsidans ramdokument
   response.redirect "start.asp"
   end sub
'---------------------
%>
<%
'Om sidan visas (ej i osynlig ram) kan besökaren här se
'skärmupplösning(ar), färgdjup och aktuell IP-adress
   if screen= "" then
%>

<script language="javascript">
s = "&swh="+screen.width+"x"
+screen.height+"&d="+screen.colorDepth
location.href="index2.asp?screen=check"+s
</script>

<%
   end if
%>

</body>
</html>


Vad händer?

Som du ser innehåller den här koden bara ett minimum av HTML-kod. Det beror på att det inte behövs mer än så – sidan kommer inte att synas.

När besökaren öppnar sidan kontrolleras hans skärmupplösning, färgdjup och IP-adress.  Om IP-adressen inte finns i databasen, eller om IP-adressen finns men med en annan skärminställning, registreras de nya uppgifterna som en ny besökare.

Om IP-adressen med de aktuella skärminställningarna redan finns, registreras inte den nya besökaren.

I båda fallen kopplas besökaren sedan vidare till sidan start.asp.

Filen start.asp

Det är den här sidan som kommer att visas för besökaren, om du väljer att lägga sidan synlig, eller för dig där du vill undersöka statistiken. På den här sidan använder vi därför betydligt mer HTML-kod; jag har till exempel lagt in en länk till stilmallen. Även här bör du kopiera koden för att undvika felaktiga radbrytningar.

<%
   besokar_ip = Request.ServerVariables("REMOTE_ADDR")
   Dim SDNConn
   Set SDNConn = Server.CreateObject("ADODB.Connection")
   SDNConn.Open "DBQ=" & Server.MapPath("besokinfo.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"
   Set rs = SDNConn.Execute("SELECT COUNT(screen) as antalskarm, screen FROM besoktabell GROUP BY screen ORDER BY screen desc")
   Set rs1 = SDNConn.Execute("SELECT ip, screen FROM besoktabell WHERE ip='" & besokar_ip & "';")
   Set rs2 = SDNConn.Execute("SELECT COUNT(ip) as ip2 FROM besoktabell")
   Set rs3 = SDNConn.Execute("SELECT colordepth FROM besoktabell WHERE ip='" & besokar_ip & "';")
   ip2=rs2("ip2")
%>

<html>
<head>
<title>Registrera skärmupplösning med mera</title>
<LINK REL="stylesheet" HREF="text.css" TYPE="text/css">
</head>

<BODY topmargin="0" leftmargin="0" marginheight="0" marginwidth="0">
<TABLE border="0" width="325" cellspacing="0" cellpadding="3">
<TR><TD width="100%" colspan="2"><P>Alla besökare</P></TD></TR>
<TR><TD width="20%"><b>Antal</b></td>
<td width="80%"><b>Skärmupplösning</b></td></tr>

<% do while not rs.eof %>

<tr><td width="20%"><b><%= rs("antalskarm") %></b></td>
<td width="80%"><b><%= rs("screen") %></b></td></tr>

<%
   rs.MoveNext
   Loop
%>

<%
   rs.Close
   Set rs = Nothing
%>

<tr><td width="100%" colspan="2">
<P>Aktuell besökare</P>
<P>Din aktuella ip-adress är <B><%= besokar_ip %></B></P></TD></TR>
<tr><td width="20%"><B>Upplösningar:</B>
<P>

<% do while not rs1.eof %>
<%= rs1("screen") %>

<br>

<%
   rs1.MoveNext
   Loop
   rs1.Close
   Set rs1 = Nothing
%>

</P>
<td width="80%"><B>Färgdjup:</B>
<P>

<% do while not rs3.eof %>
<%= rs3("colordepth") %><br>

<%
   rs3.MoveNext
   Loop
   rs3.Close
   Set rs3 = Nothing
%>

</P></TD></TR>
<tr><td width="100%" colspan="2"><P>Antal besökare sedan 28 augusti 2004: <B><%= ip2 %></B></P></TD></TR>
</TABLE>
</body>
</html>

<%
'Töm variabler
   rs2.Close
   Set rs2 = Nothing
   SDNConn.Close
   Set SDNConn = Nothing
%>


Vad händer?

Det sista vi gjorde på förra sidan var att tömma alla variabler. Nu läses uppgifterna från databasen in på nytt och skrivs till sidan. Det gör att besökaren ser "sig själv" i stället för den förra besökarens uppgifter.

Alla besökare Först kommer en avdelning med uppgifter för alla besökare. Här visas vilka olika skärmupplösningar som har använts, och hur många besökare som har haft respektive inställning.

Aktuell besökare Sedan följer uppgifterna för den aktuella besökaren. Den gällande IP-adressen visas samt vilken eller vilka skärminställningar besökaren har haft.

Totala antalet besökare Slutligen får vi veta hur många unika besökare som har öppnat sidan sedan databasen skapades (det datum vi angav i HTML-koden).

Synligt eller dolt?

När de här filerna är färdiga, är det dags att titta på hur filerna skall placeras på hemsidan.

Om du vill att besökarna skall kunna se informationen, visar du sidan index2.asp. I koden till denna, långt ned i SUB start, ser du var omkopplingen till start.asp sker. Du kan naturligtvis ändra här och ange en annan sida att länka till, men den sidan måste innehålla koden för start.asp och ha filändelsen *.asp. 

I sidan start.asp kan du lägga till annat som du vill visa på samma sida.

Gör ett ramdokument

Om det bara är du som skall se statistiken, placerar du index2.asp som en osynlig ram i ett ramdokument.

Låt oss säga att din vanliga startsida heter index.html och inte är ett ramdokument – alltså att du normalt inte använder ramar. Döp då om index.html till något annat, till exempel text.html. Sedan gör du en ny index.html med följande kod:

<html>

<head>
<title>Registrera skärmupplösning med mera</title>
</head>

<frameset rows="*,1" framespacing="0" border="0" frameborder="0">
<frame name="text" src="text.html" marginwidth="0" marginheight="0" scrolling="auto" target="_self">
<frame name="fot" src="index2.asp" marginwidth="0" marginheight="0" scrolling="no" target="text">
<noframes>
<body topmargin="0" leftmargin="0">
<p>Den här webbplatsen använder ramar.</p>
</body>
</noframes>
</frameset>

</html>

Det här gör att din vanliga startsida – den tidigare index.html – kommer att visas över hela webbläsaren, utom i den allra sista pixeln längst ned, där index2.asp kommer att visas men inte synas.

Om du redan nu använder ramar, behöver du bara lägga till en ram som skall visa index2.asp.

Eftersom ramdokumentet kommer att öppna samma sida som tidigare, behöver du inte ändra några länkar till din sida.

När du sedan vill undersöka statistiken, skriver du helt enkelt in adressen till index2.asp så att sidan öppnas utan det tillhörande ramdokumentet.

Nackdelen

Nackdelen med det här sättet att skaffa uppgifter om besökarna är just att det bara är unika besökare som räknas. Det betyder:

  • Besökare som har mer eller mindre fast IP-adress, och inte ändrar skärminställning, kommer bara att räknas en gång oavsett hur många gånger de kommer tillbaka.
  • Besökare som har vanligt modem och får en ny IP-adress varje gång de återvänder, kommer att räknas som "ny besökare" vid varje besök.

För att kringgå det här kan man lägga en cookie på besökarens dator, men det tar jag inte upp i den här handledningen.

© SupportData.Net