Skippa databaser och textfiler, lagra användarna i en application-variabel istället.
------------------
essentitia preter non sans multiplicandum
13 svar · 340 visningar · startad av erka
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 !
Skippa databaser och textfiler, lagra användarna i en application-variabel istället.
------------------
essentitia preter non sans multiplicandum
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 !
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?
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
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]
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
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 !
Å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) &" "
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 !
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?
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 !
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]
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 !
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