webForumDet fria alternativet

Bra sätt att lösa besökare online ?

ASP

13 svar · 340 visningar · startad av erka

Medlem sedan dec. 19996 522 inlägg
Frågan#1

Jag tänkte visa vilka som är inloggade på en site för tillfället. Då är frågan vilket sätt som är smidigaste om man också tänker på prestanda.

1. Jag skapar ett fält i db:n som heter online och är en bolean. Sedan när någon loggar in sätter jag den till true och i session_on_end i global.asa lägger jag en update som sätter värdet till false. Eftersom namnen på de aktiva besökarna ska visas med en länk vid deras namn på varje sida måste jag hämta ut vilka som har online = true på varje sida (en include) och det faktum att jag redan har rätt mycket databas hämtningar gör att detta skulle söla ner systemet ännu mer. Det fins är att jag enkelt har infon om vilka som är online i db:n

2.När de loggar in så skickar jag deras namn samt namnid till en text fil (separerat med , tecken). Sedan hämtar jag datan från textfilen och splittar upp den efter önskemål och skriver ut det som behövs (en include). I session_on_en lägger jag sedan att de plockar bort raden med personens id ifrån textfilen.

Någon som har lite tipps kanske ?

------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !

Medlem sedan dec. 200012 464 inlägg
#2

Skippa databaser och textfiler, lagra användarna i en application-variabel istället.

------------------
essentitia preter non sans multiplicandum

Medlem sedan dec. 19996 522 inlägg
#3

Jo jag tänkte på det först men kollade på lite andra lösningar då jag inte riktigt förstod hur applications fungerade.

Jag har två värden, användarnamn och användarid tex:
strUserName = "Erik Forsberg"
IntUserId = "1"

och:
strUserName = "Bosse Andersson"
IntUserId = "2"

Hur loopar jag allt som finns i application och skriver ut alla användare?

------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !

Medlem sedan feb. 20012 412 inlägg
#4

Skippa databaser och textfiler, lagra användarna i en application-variabel istället.

Problemet är ju att Session_OnEnd inte alltid utförs. Har du något bra kodexempel på hur man får det att fungera LarsG?

mvh Jörgen :)

------------------
Varför bråka när man kan kramas?

Medlem sedan dec. 200012 464 inlägg
#5

Jo att session_onEnd inte fungerar är ett problem, men det gäller väl oavsett vilken lösning man använder.

Det enda som jag ser är att man har någon egen hantering av timeout. Det vill säga att man själv lagrar en timestamp som man uppdaterar vid besök och kontrollerar innan man visar data.

------------------
essentitia preter non sans multiplicandum

Medlem sedan dec. 19996 522 inlägg
#6

Men hur gör man för att få in värden i en application som en 2 dimensionel array.

Något sådant här efter man har logga in eller ?

strUserName = Session("UserName")
IntUserId = Session("UserId")
Application("Online")=Application("Online") & strUsername & IntUserId & "*"

Vad gör * tecknet ? jag kanske är på rätt väg iag. :)

------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !

[Redigerat av erka den 04 dec 2001]

Medlem sedan dec. 200012 464 inlägg
#7

Jo

application.lock
Application("Online")=Application("Online") & strUsername & "*" & IntUserId & "*" 
application.unlock

* är bara för att man skall skilja olika saker åt

users = split(application("online"),"*")
for i = 0 to ubound(users) step 2
response.write "Username: " & users(i)
response.write "Userid: " & users(i+1)
next

------------------
essentitia preter non sans multiplicandum

Medlem sedan dec. 19996 522 inlägg
#8

Tack LarsG ! Jobbar vidare på det och kommer säkert med någon mer fråga. Var ju på rätt väg iaf ;)

------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !

Medlem sedan dec. 19996 522 inlägg
#9

Återkom fort, jag gör en liten test bara för att se om det kan bli som jag vill. skrev lite test kod för att pröva mer fler värden än 1.

<%
Application("Online") = ""

Application.Lock
	strUserName = "Erik Forsberg"
	IntUserId = 1
	Application("Online")= Application("Online") & strUsername & "*" & IntUserId & "*" 

	strUserName = "Bo Frederiksson"
	IntUserId = "6"
	Application("Online")= Application("Online") & strUsername & "*" & IntUserId & "*" 
Application.Unlock

Users = split(Application("Online"),"*")
For a = 0 to ubound(Users) step 2
	Response.Write "Username: " & users(a) &"&nbsp;"
	Response.Write "Userid: " & users(a+1) &"<br>"
Next

%>

Men får då felmeddelandet

Microsoft VBScript runtime error '800a0009' 

Subscript out of range: '[number: 5]' 

/test/inloggade.asp, line 17

Det är raden som skriver ut UserId:t det som kommer ut på sidan är

Username: Erik Forsberg Userid: 1
Username: Bo Frederiksson Userid: 6
Username:   
Microsoft VBScript runtime error '800a0009' 

Subscript out of range: '[number: 5]' 

/test/inloggade.asp, line 17

Vad gör jag för fel eftersom han inte hittar något värde där ? tacksam :)

------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !

Medlem sedan feb. 20012 412 inlägg
#10

Hej, prova denna då, borde fungera tycker man.

Users = split(Application("Online"),"*")
For a = 0 to ubound(Users, 2)
Response.Write "Username: " & users(a) &" "
Response.Write "Userid: " & users(a) &"<br>"
Next

mvh Jörgen

------------------
Varför bråka när man kan kramas?

Medlem sedan dec. 19996 522 inlägg
#11

Nej den fungerade inte riktigt heller. Jag tror problemet är att man får det separerat så här

Erik Forsberg*1*Bo Frederiksson*6*

Borde man inte kunna göra så här istället

Application("Online")= Application("Online") & strUsername & "," & IntUserId & "*"

Sedan separera den först vid * och sedan vid , tecknen. Men det verkar ändå inte smidigt, det verkar som den inte kommer in i en 2 dim. array efter allt. Någon som har mer tipps ?

------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !

Medlem sedan dec. 200012 464 inlägg
#12

Du får nog bete dig lite olika beroende på om application("online") är tom eller inte.

Application.Lock

strUserName = "Erik Forsberg"
IntUserId = 1

if  Application("online") = "" then
Application("Online")= strUsername & "*" & IntUserId 
else
Application("Online")= Application("online") & "*" & strUsername & "*" & IntUserId 
end if

strUserName = "Bo Frederiksson"
IntUserId = "6"
if  Application("online") = "" then
Application("Online")= strUsername & "*" & IntUserId 
else
Application("Online")= Application("online") & "*" & strUsername & "*" & IntUserId 
end if

Application.Unlock

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 04 dec 2001]

Medlem sedan dec. 19996 522 inlägg
#13

Nu verkar det gå bättre :) tack killar, jag återkommer säkert om någon timme eller dag (förhoppningsvis inte)

Tack igen!

------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !

Medlem sedan dec. 19992 085 inlägg
#14

Global.asa är ju ett problem eftersom den inte fungerar så ofta.

Men idé nummer 2 verkar väääldigt omständig.

Ett annat alternativ är väl att man sätter en egen gräns för hur lång tid man ska vara inloggad o sen uppdaterar ett databasfält med senaste laddningstiden hela tiden.

I onlinelista visar du sedan alla som har en tidsdiff som är mindre än typ 20 min.

------------------
//M@rtin || Peachy.nu\\

ni taLar Bra laTiN

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)