11. december 2003 - 12:26Der er
27 kommentarer og 1 løsning
Hvem er online ud fra indhold af session
Hejsa,
Jeg har brug for at vide hvem der er online på mit site. I øjeblikket gør jeg det med en attribut 'online' i databasen, som opdateres ved login og logout. Ved login laves en session("brugernavn"). Kan man ikke få udskrevet en liste over alle samtidige værdier af den session i stedet for db løsningen?
Hvis der er nogen der har et endnu bedre forslag, så er det velkomment :)
Du kan ikke hente alle dine brugers indhold af en bestemt session. Så skal du have dem til at registerer det i applicationobjektet istedet for i databasen.
Du kan søge på løsninger her på eksperten, og der findes flere artikler på www.activeserverpages.dk om netop dette emne.
dna
Synes godt om
Slettet bruger
11. december 2003 - 18:55#4
dna > Hvordan forholder det sig performancemæssigt med applicationobjektet sammenlignet med den nuværende løsning?
ezolu: Jeg har ikke testet det på nogen måde, eller læst om det. Det hele afhænger jo af hvor mange brugere, der er online på samme tid.
Jeg kan kun komme med gætterier, og det vil jeg egentlig helst afholde mig fra! :-)
... men, man kan jo sige, at eftersom data gemt i en application kun skal ligge i hukommelsen, og ikke fysisk på en harddisk som din database jo gør, så burde den jo nok være hurtigere. Så fik jeg lavet et gæt alligevel! :-)
Hvordan laver man en sub, som fratrækker den bruger der lige har logget sig af, fra listen af brugere?
Synes godt om
Slettet bruger
11. december 2003 - 19:53#7
Derudover har jeg problemer med at få den til at indeholde tidspunktet for login i et array for sig.
global.asa
<script language="vbscript" runat="server">
Sub Application_OnStart Application.Lock Application("OnlineUsers") = "," Application("Tid") = "," Application.UnLock End Sub
Sub Session_OnStart End Sub
Sub Session_OnEnd If Len(Session("brugernavn")) > 0 Then Application.Lock Application("OnlineUsers") = Replace(Application("OnlineUsers"), Session("brugernavn") & ",", "") Application("Tid") = Replace(Application("Tid"), session("logintid") & ",", "") Application.UnLock End If End Sub </script>
1. Du har lavet det til at fjerne brugeren kan jeg se. OnEnd kommandoen.
2. Du må jo have noget kode i din OnStart-sub ?? Jeg kan ikke rigtigt se hvordan du tilføjer tidspunktet der, men det skal jo bare gøres på samme måde som et brugernavn.
3. Teoretisk, så kan 2 brugere vel godt logge ind på samme tidspunkt, og så kan du fjerne et forkert logintidspunkt i forhold til den bruger du vil fjerne... og så vil din liste med onlinebrugere (faktisk kun deres tidspunkter) være forkert! :D - Dette er jo så efter hvor mange brugere man har... om de logger ind i samme sekund osv...
Synes godt om
Slettet bruger
11. december 2003 - 20:28#9
1. Ja, men det virker ikke.
2. I min login fil, opretter jeg en session("logintid") = time(), samtidig med at session("brugernavn") sættes til rs("brugernavn") Det smarteste var måske at lave et 2D array med brugernavn i den ene dimension og logintid i den anden?
3. Ja :)
Synes godt om
Slettet bruger
11. december 2003 - 20:30#10
Ad1. Det skal siges at min logud.asp kun indeholder session.abandon og response.redirect "default.asp"
Det fjerner jo brugerens navn og tid fra de 2 application-variabler... og dermed er de jo "logget ud".
dna
Synes godt om
Slettet bruger
12. december 2003 - 22:06#16
dna > Jeg mener bare, det er jo den kode der står under Sub Session_OnEnd men det aktiveres tydeligvis ikke gennem min session.abandon
Synes godt om
Slettet bruger
12. december 2003 - 22:29#17
doh, jeg har bare tilføjet det under logud.asp nu, og det virker fint nok, til gengæld returnerer hverken Call WriteOnlineUsers() eller Response.Write CountOnlineUsers() nogetsomhelst, selvom jeg er logget ind. Og jeg har husket at Call AddOnlineUser() når jeg logger ind
endnu et login bliver også registreret og jeg har tilføjet dem fra url'en
Synes godt om
Slettet bruger
12. december 2003 - 23:39#23
I øvrigt bliver de respektive elementer fra Application("Tid") ikke fjernet ved logout
Synes godt om
Slettet bruger
12. december 2003 - 23:43#24
Men jeg har jo ændret i dem - prøv at se her en gang :
Sub AddOnlineUser() Application.Lock Application("OnlineUsers") = Application("Onlineusers") & Session("brugernavn") & "," Application("Tid") = Application("Tid") & Session("logintid") & "," Application.UnLock End Sub
' --- funktion som retunerer antallet af online brugere --- Function CountOnLineUsers() Dim arrUsers ' --- lav et array med online brugere --- arrUsers = Split(Application("Onlineusers"), ",") ' --- antallet af online brugere er altid størrelsen på arrayet -1 --- CountOnLineUsers = UBound(arrUsers) - 1 End Function
' --- procedure til at udskrive online brugere --- Sub WriteOnLineUsers() Dim arrUsers Dim n ' --- lav et array med online brugere --- arrUsers = Split(Application("Onlineusers"), ",") arrTid = Split(Application("Tid"), ",") ' --- udskriv liste --- if blnSpanClass = true then strSpanClass = "graa" blnSpanClass = false else strSpanClass = "lys" blnSpanClass = true end if For n = 1 To UBound(arrUsers) -1 response.write"<tr>" & vbCrlf response.write"<td class=""" & strSpanClass & """> <a class=""forumLink"" href=""default.asp?s=bruger&navn=" & arrUsers(n) & """>" & arrUsers(n) & "</a></td>" & vbCrlf response.write"<td class=""" & strSpanClass & """>" & arrTid(n) & "</td>" & vbCrlf response.write"</tr>" & vbCrlf Response.Write(arrUsers(n) & "<br>") Next End Sub
og global.asa
<script language="vbscript" runat="server">
Sub Application_OnStart Application.Lock Application("OnlineUsers") = "," Application("Tid") = "," Application.UnLock End Sub
Sub Session_OnStart End Sub
Sub Session_OnEnd If Len(Session("brugernavn")) > 0 Then Application.Lock Application("OnlineUsers") = Replace(Application("OnlineUsers"), Session("brugernavn") & ",", "") Application("Tid") = Replace(Application("Tid"), session("logintid") & ",", "") Application.UnLock End If End Sub </script>
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.