Inte för att jag vet vad jag sysslar med när det gäller ASP, men detta problem är lite över mitt lilla logiska tänkande. Har en onlinelista på min sajt, funkar kanon. tar denna koden å lägger på default.asp (som givetvis ligger i rooten och det gör databasen oxå) för att visa vilka sidor som besöks även på startsidan, funkar kanon. Jag ser en del brister i din kod och alternativa lösningar. Vilket skulle innebära att skriva om din kod helt. är övertygad om att den går att göra bättre och förslag emottages tacksamt, men jag vill även veta varför det fungerar på default.asp men inte på nyheter_pa_ig.asp, dom ligger ju i samma led, i rooten båda två? Första lite generella tips:onlinelisteproblem
Nu kommer det skumma... tar exakt samma kod och lägger på nyheter_pa_ig.asp som också ligger i rooten, helt plötsligt så nollställer den antal online... hmmm någon som har något förslag på vad det kan bero på.
koden jag använder för att visa var besökarna befinner sig ser ut som följande:
======================================================================
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("xxx.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
Radera = "DELETE FROM besokare WHERE Tid < '" & DateAdd("n","-20",now()) & "'"
RecSet.Open Radera, Connect
Addera = " SELECT * FROM besokare WHERE Tid > '" & DateAdd("n","-20",now()) & "'"
RecSet.Open Addera, Connect
Response.Write "<table border=""0"">"
While Not RecSet.EOF
IF RecSet("Sida") = "/lista.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på " & "<b>" & "Onlinelistan" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/butiker/001inkclub/index.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på " & "<b>" & "InkClubs annons" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/butiker/002tradera/index.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på " & "<b>" & "Traderas annons" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/Plan2/onlinespel.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på " & "<b>" & " Onlinespel" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/Plan1/script.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på " & "<b>" & "scriptsamlingen" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/igtavlingar.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren besöker " & "<b>" & "IG's tävlingar" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/default.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren är på " & "<b>" & "Startsidan" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/formular/tavling1.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren håller på med " & "<b>" & "I-G's tävling" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/Plan2/poker.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på " & "<b>" & "Poker online" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/Plan3/film_musik.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på sidan " & "<b>" & "Film och musik" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/riktnummer/allariktnummer.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på " & "<b>" & "riktnummer Sverige" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/riktnummer/search.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren granskar " & "<b>" & "sökresultat riktnummer" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/Plan3/klader.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på " & "<b>" & "Postorder och kläder" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/forslag_till_ig.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på sidan " & "<b>" & "Förslag till IG" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/nyheter_pa_ig.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på " & "<b>" & "Nyheter på IG" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/LiquidChat2/Enter.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren är och " & "<b>" & "Chattar på Café Chatterian" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/LiquidChat2/default.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren ska " & "<b>" & "logga in till Café Chatterian" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/tipsa.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren funderar på att " & "<b>" & "tipsa en vän om IG" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/formular/skicka_annons.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren har skickat " & "<b>" & "annons till IG" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/butiker/visa.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på " & "<b>" & "Annonserna" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/tack.html" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren har skickat " & "<b>" & "tips om IG till en vän" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/kontakt/kontakt.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren " & "<b>" & " kontaktar InternetGallerian" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/links_to_tavlingar.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på " & "<b>" & " Länkar till tävlingar" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/skicka.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren skickade tips " & "<b>" & " om InternetGallerian" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/Default.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren är på " & "<b>" & "Startsidan" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/Formular/formular_alt.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren tittar på " & "<b>" & "Annonsera på InternetGallerian" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/Formular/skicka.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren har skickat " & "<b>" & "Annons till InternetGallerian" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
ElseIf RecSet("Sida") = "/tavling3.asp" THEN
Response.write "<tr><td width=""75%"" bgcolor=""#A6B3BD""> <Font face=""Verdana"" size=""1"">" & "Besökaren håller på med " & "<b>" & " InternetGallerians tävling" & "</b>" & "</td><td width=""90px"" align=""center"" bgcolor=""#99CCCC""> <Font face=""Verdana"" size=""1"">" & RecSet("Klocka") & "</td></tr>" & "</font>"
END IF
RecSet.MoveNext
Wend
RecSet.Close
Connect.close
Set Radera=Nothing
Set Addera=Nothing
Response.Write "</table>"
%>
========================================================================
Koden i början av SAMTLIGA asp-sidor på platsen ser ut som följer:
========================================================================
<%
Dim Conn, RS, sida
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("xxx.mdb") & ";"
Set RS = Conn.execute("SELECT count(ID) as online FROM besokare WHERE Tid > '" & DateAdd("n","-20",now()) & "'")
%>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("xxx.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
Radera = "DELETE FROM besokare WHERE Tid < '" & DateAdd("n","-20",now()) & "'"
RecSet.Open Radera, Conn
%>
<% 'dessa rader är nyinlagda
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("xxxx_xx.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
Radera = "DELETE FROM besokare WHERE Tid < '" & DateAdd("d","-5",now()) & "'"
RecSet.Open Radera, Conn
'ner hit %>
<%
Dim Connect, Radera, Addera, RecSet
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("xxx.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
Radera = "SELECT * FROM besokare WHERE ID = '" & Request.ServerVariables("REMOTE_ADDR") & "'"
RecSet.Open Radera, Connect, adOpenStatic, adLockOptimistic
If RecSet.EOF Then
Radera=null
Else
RecSet.Delete
RecSet.Close
Connect.Close
End If
%>
<% Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("xxx.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
Addera = "SELECT * FROM besokare"
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic
RecSet.AddNew
RecSet("ID") = Request.ServerVariables("REMOTE_ADDR")
RecSet("Sida") = Request.ServerVariables("PATH_INFO")
RecSet("Tid") = FormatDateTime(Now)
RecSet("Klocka") = Time
RecSet.Update
RecSet.Close
Connect.Close %>
<% Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("xxxx_xx.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
Addera = "SELECT * FROM besokare"
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic
RecSet.AddNew
RecSet("ID") = Request.ServerVariables("REMOTE_ADDR")
RecSet("Sida") = Request.ServerVariables("PATH_INFO")
RecSet("Tid") = FormatDateTime(Now)
RecSet("Klocka") = Time
RecSet("From") = Request.ServerVariables("HTTP_REFERER")
RecSet.Update
RecSet.Close
Connect.Close %>
=========================================================================
hoppas nån kan förklara va fasen som händer... för jag begriper de inte Sv: onlinelisteproblem
Är du intresserad av detta eller bara att få ditt problemlöst?Sv:onlinelisteproblem
Sv: onlinelisteproblem
* Använd Option Explicit
* Använd typlib till ADO
* Använd CSS istället för förmota taggar i tabellen.
<%@Language="VBScript" CODEPAGE="65001"%>
<!-- METADATA
TYPE="TypeLib"
NAME="Microsoft ActiveX Data Objects 2.6 Library"
UUID="{00000206-0000-0010-8000-00AA006D2EA4}"
VERSION="2.6" -->
<%Option Explicit%>
För att föra statestik på aktuella besökare skulle jag göra på följande sätt:
Datastruktur består av två tabeller:
Table: Pages
Field: PageId int autoinc. PK
Field: PageURL varchar(50)
Field: PageDescription varchar(255)
Table: Sessions
Field: SessionId int autoinc. PK
Field: SessionPage varchar(50) -> Pages.PageURL
Field: SessionTime datetime
Koden som för in, uppdaterar tabbellerna ser ut så här:
<%
Function OpenConnection()
Dim con
Dim FileName
'This is only a demo.
'NEVER store the database in a public avalibel directory!!!
FileName = Server.Mappath("statistics.mdb")
'Creates a connection to the database
Set con = CreateObject("ADODB.Connection")
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & FileName & ";"
'Returns the connection
Set OpenConnection = con
End Function
Sub Visit(Id, Page)
Dim con
Dim cmd
Dim RecordsAffected
Set con = OpenConnection()
Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = con
cmd.CommandText = "UpdateSession"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter("@Id", _
adInteger, _
adParamInput, _
, _
Id)
cmd.Parameters.Append cmd.CreateParameter("@Page", _
adVarChar, _
adParamInput, _
255, _
Page)
cmd.Execute RecordsAffected, , adExecuteNoRecords
'If session dose not exist, creat it
If RecordsAffected = 0 Then
cmd.CommandText = "InsertSession"
cmd.Execute RecordsAffected, , adExecuteNoRecords
End If
CleanUp(con)
'Close database
con.close
End Sub
Visit Session.SessionID, Request.ServerVariables("SCRIPT_NAME")
%>
Vilket använder två sparade Access frågor:
UpdateSession
PARAMETERS [@Id] Long, [@Page] Text ( 255 );
UPDATE Sessions SET Sessions.SessionPage = [@Page], Sessions.SessionTime = Now()
WHERE Sessions.SessionId = [@Id];
Och InsertSession
PARAMETERS [@Id] Long, [@Page] Text ( 255 );
INSERT INTO Sessions ( SessionId, SessionPage, SessionTime )
VALUES ([@Id], [@Page], Now());
Genom att lagra SQL frågorna i databasen finns det mindre risk att jag behöver förändra min kod vid förändringar av databas och det underlättar vid byta av databas till t.ex. MS SQL Server.
Dessutom ger dett bättre prestanda då fråge motorn inte behöver tolka SQL frågan. Den behöver bara slå upp den.
Koden som städar upp gammla sessioner ser ut så här:
<%
Sub CleanUp(con)
Const CleanUpTimeOut = "CleanUpTimeOut"
Application.Lock
If Application(CleanUpTimeOut) < Now() Then
Application.UnLock
con.execute "DeleteSessions"
'Calculate next earliest clean up
Application(CleanUpTimeOut) = DateAdd("n", 20, Now())
Else
Application.UnLock
End IF
End Sub
%>
Med följande fråga:
DeleteSessions
DELETE FROM Sessions
WHERE Sessions.SessionTime<DateAdd("n",-20,Now());
Datastrukturen med två tabeller ger mig oxå fördelar som mycket mindre kod, när jag vill lista resultatet. Samt att när du nu skapar ny sidor behöver du bara behöver göra tillägg i databasen, istället för att redigera i koden:
<%
Sub VisitorTable(rs, fldId, fldDescription, fldTime)
Response.Write "<table>"
Do Until rs.EOF
If IsNull(fldDescription.Value) then
Response.Write "<tr>" & _
"<td>(Description is missing)</td>" & _
"<td>" & FormatDateTime(fldTime.Value, vbShortTime) & "</td>" & _
"</tr>" & vbCrLF
Else
Response.Write "<tr>" & _
"<td>" & Server.HTMLEncode(fldDescription.Value) & "</td>" & _
"<td>" & FormatDateTime(fldTime.Value, vbShortDate or vbShortTime) & "</td>" & _
"</tr>" & vbCrLF
End If
rs.MoveNext
Loop
Response.Write "</table>"
End Sub
Dim rs
Dim cmd
Dim con
Set con = OpenConnection()
Set rs = con.Execute("Visitors", , adCmdTable)
VisitorTable rs, rs("SessionId"), rs("PageDescription"), rs("SessionTime")
rs.Close
con.Close
%>
Som använder följande sparad access SQL fråga:
Visitors
SELECT Sessions.SessionId, Sessions.SessionPage, Pages.PageDescription, Sessions.SessionTime
FROM Sessions LEFT JOIN Pages ON Sessions.SessionPage = Pages.PageURL
WHERE Sessions.SessionTime > DateAdd("n",-20,Now());