asp counter & statistik

davedigital

Mitglied
Hat jemand Informationen wie man einen ASP-Onlinecounter programmiert...und eventuell wie man Statistiken über die aufgerufenen Seiten erhält?!

danke im Voraus
dAVEdIGITAL
 
HAllo,..

solltest du die global.asa verwenden können, kannst du dir mit den Session_OnStart und Session_OnEnd einfach einen Counter basteln...

Bei Beginn einer Session erhöhst du den Wert einer Application-Variable um eines, beim Ende erniedrigst du wieder ..

du kannst nat. auch noch eine 2te App-Variable führen in der du die gesamt Besucher mitzählst ..


ausführliche Statistiken kannst du dir erzeugen in dem du die Logs vom IIS mithilfe eines Scriptes auswertest,
solltest du keinen Zugriff auf diese haben, schreib dir eine Funktion, welche die gewünschten Daten in eine txt-Datei schreibt, und rufe dies Funktion am Anfang einer jeden ASP-Seite auf ..
Sprich, mach dir deine eigenen Logfiles und werte diese dann aus =)


hoffe es war verständlich =)

mfg,
crazy-weasel
 
weasel, erstmal vielen dank,
soweit ich weiss hab ich schon vollen zugriff auf den IIS..aber ich kenn mich in asp garnicht aus (kann zwar ein bissal vba, und darum wirds wohl denk ich kein problem sein)

also, hast du vielleicht ein code-beispiel, oder ein tutorial oÄ. ??!

versteh schon, dass das mit irgendwelchen log-files funktioniert, aber ich weiss halt nicht, wie man drauf zugreift und diese auswertet.
hab mal einen counter in php programmiert, doch der passierte nur auf einer textdatei. auf jeden fall möchte ich nicht am anfang einer jeden page eine funktion einbauen - zu viele seiten, zu viel aufwand

1. ich möchte einen zähler der die gesamtheit der besucher die je auf der seite waren protokolliert.

2. und dann noch eine statistik proggen (anzahl der besucher pro seite, besucherfrequenz...)

wär nett, wenn noch jemand irgendwelche infos dazu hat..!!

so long, thx
dAVEdIGITAL
 
Nun gut,.. hab mich mal hingesetzt und ein logfileauswertescript gebastelt ..

zuvor aber noch deinen counter:

Code:
Sub Application_OnStart
' Bei start des Servers alle Variablen auf 0 setzen
	Application("ActiveUsers") = 0
	Application("AllUsers")= 0
	
End Sub

Sub Session_OnStart

Dim FSO, gcFile, scFile, aktCount, newCount, countfile

countfile = Server.MapPath("data\counter.txt")


set FSO = server.CreateObject("Scripting.FileSystemObject")
set File = FSO.OpenTextFile(countfile)

aktCount = gcFile.ReadLine ' Counterstand wird aus Datei gelesen
newCount = aktCount + 1 ' Counterstand wird erhöht

Application("AllUsers") = newCount ' Counterstand wird einer Applicationvariable zugewiesen

File.close
SET File = nothing

set File = FSO.CreateTextFile(countfile) 

File.WriteLine(newCount) ' neuer counterstand wird in Datei geschrieben

File.close
	
Session.Timeout = 20
Session("Start") = Now

Application.Lock
	Application("ActiveUsers") = Application("ActiveUsers") + 1 ' aktueller Userstand wird erhöht
Application.UnLock


SET FSO = nothing
SET gcFile = nothing

End Sub

Sub Session_OnEnd
	Application.Lock
		Application("ActiveUsers") = Application("ActiveUsers") - 1 ' aktueller Userstand wird erniedrigt .. eh .. verringert *rolleyes*
	Application.UnLock
End Sub
^^
Dieser Code muss in deine Global.asa Datei,
In der Session_onStart - Sub steht alles drinnen was geschieht wenn ein Benutzer neu auf deine Siet kommt (Counterstand erhöhen..),
in der Session_onEnd alles beim Verlassen deiner site, bzw. bei ender der Session (Session wird im Script auf 20 minuten gesetzt)

Wüsste jetzt nicht was ich dabei noch erklären soll, solltest da noch fragen habe, stelle diese =)

Nun zu den Statistiken,

das angehängte Script öffnet alle Dateien in einem bestimmten Verzeichniss und wertet die Daten nach einem bestimmten Schema aus..
Das Script ist für IIS Logdateien im Format W3C-Erweitert Format Konzipiert!
Es ließt aus wie oft die Dateien aufgerufen wurden, welche IP-Addresse wie oft eine Datei aufrief und welcher Browser wie oft eine Datei aufrief

Das komplette Script ist angehängt, mit ein paar Logdateien..

Werde nun die ASP-Teile ein wenig erklären..

Code:
strLogFolder = Server.MapPath ("/logs/")

SET FSO = Server.CreateObject("Scripting.FileSystemObject")
SET FOLDER = FSO.GetFolder(strLogFolder)

for each file in folder.files
	log_count = log_count + 1
next
^^
strLogFolder ist der Ordner in dem sich die Logdateien befindet, man kann das Server.MapPath(..) natürlich durch eine andere absolute Pfadangabe ersetzen

Der Ordner wird dann geöffnet (SET Folder ..) und in einer Schleife wird die Anzahl der Dateien ermittelt (eigentlich unwichtig,..)


Code:
01	SET dicUIP = Server.CreateObject("Scripting.Dictionary")
02	SET dicFile = Server.CreateObject("Scripting.Dictionary")
03	SET dicBrowser = Server.CreateObject("Scripting.Dictionary")
04
05	for each file in folder.Files
06
07		SET logfile = FSO.OpenTextFile(file)
08		
09		while not logfile.AtEndOfStream
10
11			strLine = logfile.ReadLine
12			if not Left(strLine, 1) = "#" then
13			
14				arrLine = split(strLine, chr(32))				
15				if not UBOUND(arrLine) <> 10 then
16					if not dicUIP.Exists(arrLine(2)) then
17						dicUIP.Add arrLine(2), 1
18					else
19						dicUIP.Item(arrLine(2)) = cint(dicUIP.Item(arrLine(2)) + 1)
20					end if
21					
22					if not dicFile.Exists(arrLine(7)) then
23						dicFile.Add arrLine(7), 1
24					else
25						dicFile.Item(arrLine(7)) = cint(dicFile.Item(arrLine(7))+ 1)
26					end if
27					
28					if not dicBrowser.Exists(arrLine(10)) then
29						dicBrowser.Add arrLine(10), 1
30					else
31						dicBrowser.Item(arrLine(10)) = cint(dicBrowser.Item(arrLine(10))) + 1
32					end if
33				end if
34				
35			end if
36		
37		wend
38		
39		logfile.close
40		SET logfile = nothing
41
42	next

in den Zeilen 1 - 3 werden Dictionary-Objecte angelegt zum zwischenspeichern der Werte..
05 - Eine Schleife die jede Datei im Ordner durchgeht
09 - weitere Schleife die alle Zeilen in der Datei durchgeht
11 - Eine Zeile wird ausgelesen
12 - Jede Zeile die mit einem '#' am Anfang wird ausgelassen da es sich dabei um Kommentarzeilen handelt
14 - Die gelesene Zeile wird in ein Array gesplitet, als Trennzeichen wird das Leerzeichen genommen.. - die Einzellnen Daten haben nun ein eigenes Arrayfeld..
15 - Falls in der Zeile nicht die richtigen Daten standen, wird sie nicht ausgewertet, könnte zu einem Fehler kommen
16/17 - Bei arrLine(2) Handelt es sich um die IP adresse des Clienten, sollt ein Schlüssel mit dieser IP noch nicht existieren wird er erstellt, und als Wert bekommt er eine '1'
19 - Sollte der Schlüssel schon vorher existiert haben, wird der Wert um eins erhöht..
23 - 32 das selbe wie oben - arrLine(7) = Datei | arrLine(10) = Browser


Code:
	ip = dicUIP.Keys
	ip_c = dicUIP.Items

	browser = dicBrowser.Keys
	browser_c = dicBrowser.Items

	files = dicFile.Keys
	files_c = dicFile.Items
die Dictionary Schlüssel und deren Daten werden in Arrays übergeben...


Code:
	browser_short = split(browser(i), ";")
	browser_short(1) = replace(browser_short(1), "+", "")
	browser_short(2) = replace(browser_short(2), "+", " ")
	Response.Write (browser_short(1) & " unter " & browser_short(2))
Die Browserangabe (bzw. User-Client ..) wird Formatiert,.. ausgegeben wird dann nur der wirkliche Browser (ohne Mozilla/4.0+(compatible...) und das Betriebsystem..


Der Restliche Code ist HTML code, oder anderer Code, der klar sein sollte..

wenn nicht klar, bitte fragt =)

und hier noch ScreenShots ..

stats1.jpg

stats2.jpg

stats3.jpg




so... ich hoffe du kannst es brauchen.. *ganz fertig vomtipseln etc. ist..*
ist gerade frisch geschrieben... =)

mfg,
crazy-weasel

p.s.
schaut mal da bei den Browsern.. :rolleyes:
 

Anhänge

  • webstats.zip
    10,5 KB · Aufrufe: 51
thx

ooohhhh, danke crazy-weasel - du bist GROSSARTIG!!
so, jez werd ich gleich mal den source durchgehen und mich an die arbeit machen... und die bewertung hast du wirklich voll und ganz verdient!!

greetz
dAVEdIGITAL
 
ich mache genauso aber es geht nicht hier ist mein code:

Dim countfile,FSO,File,aktCount
countfile = Server.MapPath("data\counter.txt")
set FSO = server.CreateObject("Scripting.FileSystemObject")
set File = FSO.OpenTextFile(countfile)
aktCount = 1
File.WriteLine aktCount


File.close
set File = nothing
set FSO = nothing
 
Hi

ich vermute mal, Dir fehlt die Deklaration der Konstanten für den Eröffnungsmodus. Ansonsten ist es nicht falsch, die Fehlermeldung, die kommt, hier mit dazuzuposten. Ansonsten dürfen auch die Berechtigungen, ein File zu beschreiben, nicht fehlen. Darauf wird auf den aspextra-Seite eingegangen.

Versuch mal testweise:

Code:
<%
' --- Deklaration der Konstanten für den Öffnungsmodus
Const ForReading   = 1
Const ForWriting   = 2
Const ForAppending = 8
 
' --- Deklaration der Tristate-Konstanten 
Const TristateTrue       = -1 
Const TristateFalse      = 0
Const TristateUseDefault = -2 

Dim FSO,File,aktCount
 set FSO = server.CreateObject("Scripting.FileSystemObject")
 set File = FSO.OpenTextFile _
                              ( _
                              Server.MapPath _
                                     ( _
                                     "data\counter.txt" _
                                     ), _
                              ForAppending, _
                              True, _
                              TristateFalse _
                              )
 aktCount  = 1
 File.WriteLine aktCount
 File.close
 set File = nothing
 set  FSO = nothing
%>
 

Neue Beiträge

Zurück