Avatar billede nordclc Nybegynder
29. april 2003 - 20:58 Der er 13 kommentarer og
1 løsning

Statistik: Hvor lang tid på siden

Til et statistik modul skal jeg bruge information om hvor lang tid en bruger læser på en side før han går videre.

Dvs. det øjeblik siden loader: START
Når der trykkes på et nyt link eller vinduet lukkes: STOP

Differencen mellem START og STOP.

//nordclc
Avatar billede oasen Nybegynder
29. april 2003 - 21:09 #1
Jeg ville lave et par sessionvariabler.

I toppen af hver side:

If Session("File") <> "" Then
  Response.Write "Tid brugt på " & Session("File") & ": " & DateDiff("s", Session("Start"), Now) & " sekunder"
End If

Session("File") = Request.ServerVariables("Script_Name")
Session("Start") = Now
Avatar billede oasen Nybegynder
29. april 2003 - 21:12 #2
Det kan dog være et problem, hvis:

1) Brugerens browser ikke accepterer cookies.
2) Brugeren lukker browseren.

2'eren kan du løse ved at åbne et lille vindue, hvori du udfører ASP-kode, ved onBlur. Men her kan du også få et problem, hvis brugeren har slået active scripting fra eller benytter en popup-killer.
Avatar billede oasen Nybegynder
29. april 2003 - 21:16 #3
Men i langt de fleste tilfælde, vil der jo ingen problemer være.

Alternativt kan du også have en usynlig iframe til at opdatere hvert 5. sekund f.eks. Heri kan du hele tiden tjekke, hvilken side brugeren befinder sig på ved at sende filnavnet til frame'n med en querystring.

Men jeg tror første løsning er mit bedste bud pt.
Avatar billede nordclc Nybegynder
29. april 2003 - 21:34 #4
Er der ikke nogen måde som dækker de mangler der?
Avatar billede nordclc Nybegynder
29. april 2003 - 21:36 #5
Jeg tænkte på om man via onload/unload kunne gøre et eller andet med at lave en session som indeholder starttid (i onload) eller sådan noget?
Avatar billede oasen Nybegynder
29. april 2003 - 21:47 #6
ASP afvikles før HTML/javascript udskrives, så nej.
Men du kan godt bruge onLoad/onUnload og f.eks. lade javascript overføre nogle variabler til næste side, hvor du kan aflæse dem serverside. Men det kan give endnu flere problemer end ovenstående.

Men er det i øvrigt ikke underordnet, om der er et par brugere i ny og næ, du ikke får registreret?
Hver gang du får en ny værdi af Session("File") og Session("Start"), indsætter du bare disse i en tabel (evt. sammen med datoen og IP-adressen).
Herefter kan du nemt og smertefrit regne gennemsnitsopholdstiden på hver enkel side ud:

Set rs = myConn.Execute("Select Filnavn, Avg(BrugtTid) As GnmTid From Tabel Group By Filnavn")

While Not rs.EOF
  Response.Write "Tid brugt på " & rs("Filnavn") & ": " & rs("GnmTid") & " sekunder<br>"
  rs.MoveNext
Wend
Avatar billede oasen Nybegynder
29. april 2003 - 21:53 #7
Indsættelsen i tabellen kan du foretage således:
(Her ødelægges statistikken heller ikke, hvis brugeren opdaterer den pågældende side)


If Session("File") <> "" And Session("File") <> Request.ServerVariables("Script_Name") Then
  myConn.Execute("Insert Into Tabel (Filnavn, BrugtTid) Values ('" & Session("File") & "', " & DateDiff("s", Session("Start"), Now) & ")")
End If

Session("File") = Request.ServerVariables("Script_Name")
Session("Start") = Now
Avatar billede nordclc Nybegynder
29. april 2003 - 22:19 #8
Det virke. Tak for det ;o)

Men for at få tal for den sidste side brugeren besøger (som regl sidste menupunkt) skal jeg vil have adgang til webserverens log eller hvad?
Avatar billede oasen Nybegynder
29. april 2003 - 22:34 #9
Der vil jeg nok lave onBlur-tricket, du ser rundt omkring:

<html>
<head>
<script language="javascript">
<!--
function farvel() {
  win=window.open("farvel.asp", "newwin", "toolbar=0,location=0,directories=0,menubar=0,status=0,scrollbars=0,height=100,width=100");
}
//-->
</script>
</head>
<body onUnload="farvel();">
Blablabla
</body>
</html>


I "farvel.asp" udfører du så ca. samme kode som før:

If Session("File") <> "" Then
  myConn.Execute("Insert Into Tabel (Filnavn, BrugtTid) Values ('" & Session("File") & "', " & DateDiff("s", Session("Start"), Now) & ")")
End If
Avatar billede oasen Nybegynder
29. april 2003 - 22:38 #10
Og så skal du lige huske at lukke popup-vinduet igen med det samme. På dette tidspunkt er din ASP-kode som før nævnt afviklet.
Indsæt følgende i "farvel.asp":

<body onLoad="window.close();">
Avatar billede oasen Nybegynder
29. april 2003 - 22:39 #11
Og glem ikke at lukke databaseforbindelsen efter dig!
Avatar billede nordclc Nybegynder
29. april 2003 - 22:44 #12
Altså:
  myConn.Close
  Set myConn = Nothing

?
Avatar billede oasen Nybegynder
30. april 2003 - 13:41 #13
Nemlig - og også altid dit recordsæt:

Set rs = Nothing
Avatar billede nordclc Nybegynder
30. april 2003 - 13:47 #14
OK, bukker og takker ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester