Avatar billede Slettet bruger
11. december 2003 - 12:26 Der 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 :)
Avatar billede djjerry82 Nybegynder
11. december 2003 - 13:19 #1
Avatar billede djjerry82 Nybegynder
11. december 2003 - 13:21 #2
Der er også en masse godt her:
http://www.eksperten.dk/spm/320701
Avatar billede dna Nybegynder
11. december 2003 - 13:21 #3
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
Avatar billede Slettet bruger
11. december 2003 - 18:55 #4
dna > Hvordan forholder det sig performancemæssigt med applicationobjektet sammenlignet med den nuværende løsning?
Avatar billede dna Nybegynder
11. december 2003 - 19:16 #5
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! :-)

dna
Avatar billede Slettet bruger
11. december 2003 - 19:33 #6
fair nok. Har nu kigget på http://activedeveloper.dk/julekalender/julegaver/whoson.asp

og det ser jo fint ud!

Hvordan laver man en sub, som fratrækker den bruger der lige har logget sig af, fra listen af brugere?
Avatar billede 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>


og i WriteOnlineUsers kalder jeg så

    For n = 1 To UBound(arrUsers) -1
        response.write"<tr>" & vbCrlf
            response.write"<td class=""" & strSpanClass & """>&nbsp;<a class=""forumLink"" href=""default.asp?s=bruger&navn=" & arrUsers(n) & """>" & arrUsers(n) & "</a></td>" & vbCrlf
            response.write"<td class=""" & strSpanClass & """>" & FormatDateTime(arrTid(n),vbShortTime) & "</td>" & vbCrlf
        response.write"</tr>" & vbCrlf
        Response.Write(arrUsers(n) & "<br>")
    Next
Avatar billede dna Nybegynder
11. december 2003 - 20:00 #8
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...
Avatar billede 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 :)
Avatar billede 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"
Avatar billede dna Nybegynder
11. december 2003 - 20:38 #11
Kan jeg se den kode du bruger til at fjerne navn og tid fra applicationen, så kan jeg se om jeg kan hjælpe.

dna
Avatar billede Slettet bruger
11. december 2003 - 20:39 #12
den findes ikke :)

Kommentar: ezolu
11/12-2003 19:33:51    fair nok. Har nu kigget på http://activedeveloper.dk/julekalender/julegaver/whoson.asp

og det ser jo fint ud!

Hvordan laver man en sub, som fratrækker den bruger der lige har logget sig af, fra listen af brugere?
Avatar billede dna Nybegynder
11. december 2003 - 22:28 #13
Altså... du kan jo bare tilføje dette ved logud:

Application("OnlineUsers") = Replace(Application("OnlineUsers"), Session("brugernavn") & ",", "")
    Application("Tid") = Replace(Application("Tid"), session("logintid") & ",", "")
Avatar billede Slettet bruger
11. december 2003 - 22:52 #14
dna > hvad skulle det hjælpe og er det ikke det der allerede står ved Session_OnEnd
Avatar billede dna Nybegynder
12. december 2003 - 07:57 #15
Hvad det skulle hjælpe?

Det fjerner jo brugerens navn og tid fra de 2 application-variabler... og dermed er de jo "logget ud".

dna
Avatar billede 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
Avatar billede 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
Avatar billede dna Nybegynder
12. december 2003 - 23:21 #18
Prøv bare at udskrive:

Response.write(Application("Onlineusers"))

hvad siger den så ?

dna
Avatar billede Slettet bruger
12. december 2003 - 23:23 #19
så skriver den det brugernavn jeg er logget ind med, efterfulgt af et komma
Avatar billede dna Nybegynder
12. december 2003 - 23:30 #20
Det er også rigtigt nok! Det er så fordi, at der kun er logget 1 bruger ind. Så den registrer det da i det mindste fint nok!

Prøv at åbne en browser mere og så logge ind med en anden bruger i den browser.. og så se om ikke den skriver begge navne?!

dna
Avatar billede dna Nybegynder
12. december 2003 - 23:33 #21
husk at tilføje de subs og funktioner som beskrevet på den side:
http://activedeveloper.dk/julekalender/julegaver/whoson.asp

Response.Write CountOnlineUsers()
Call WriteOnlineUsers()

Husk det er sådan du kalder de 2!

dna
Avatar billede Slettet bruger
12. december 2003 - 23:36 #22
endnu et login bliver også registreret og jeg har tilføjet dem fra url'en
Avatar billede Slettet bruger
12. december 2003 - 23:39 #23
I øvrigt bliver de respektive elementer fra Application("Tid") ikke fjernet ved logout
Avatar billede 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 & """>&nbsp;<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>

og logud.asp

Application("OnlineUsers") = Replace(Application("OnlineUsers"), Session("brugernavn") & ",", "")
Application("Tid") = Replace(Application("Tid"), session("logintid") & ",", "")
session.abandon
response.redirect "default.asp"
Avatar billede dna Nybegynder
12. december 2003 - 23:58 #25
Mystisk... :-)

Ser da umildbart rigtigt nok ud.

Hvad indeholde application("Tid") før et login, efter et login... samt efter logud... kan du ikke lige prøve at lave den test?!

dna
Avatar billede Slettet bruger
13. december 2003 - 00:14 #26
inden login: intet
efter login: 00:13:06,
efter logud: intet

så det er fint nok...
Avatar billede Slettet bruger
13. december 2003 - 00:17 #27
aah, det hjalp lidt at ændre
For n = 1 To UBound(arrUsers) -1 til For n = 0 To UBound(arrUsers) -1
Avatar billede dna Nybegynder
13. december 2003 - 00:30 #28
Den havde jeg så heller ikke set!

Godt at det virker nu!

dna
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester