Avatar billede Slettet bruger
19. maj 2007 - 17:27 Der er 3 kommentarer og
1 løsning

Onlinecounter (SESSIONS!)

Hej eksperter.

Jeg har siddet og funderet lidt over hvordan man kan lave en onlinecounter, som kører via sessions.
Jeg har før gjort det med en global.asa, som altid har virket kanon. Men i dette tilfælde har jeg ikke mulighed for at benytte en global.asa fil, derefter er jeg kommet frem til at sessions må være den næstbedste løsning. (?)

Men jeg er lidt i tvivl om hvordan jeg skal få en onlinecounter til at køre via sessions, skal jeg bruge en txt fil til at gemme counteren? Og kan den fratrække når sessionen udløber? Eller hvordan og hvorledes ?:s

Vil redde min dag :)
Avatar billede w13 Novice
19. maj 2007 - 18:05 #1
Jeg har måske en løsning.
Hvis vi siger, at Sessions udløber efter 20 min. på din side (standard, men kan ændres med Session.Timeout = 60). Så kan du kode det uden brug af Sessions overhovedet.
Nu håber jeg, du har inkluderet en fil på samtlige sider - det vil lette det meget. I hvert fald skal du på hver side, ved load (hvilket giver sig selv når vi arbejder med ASP), gemme dato og klokkeslet i databasen ud for brugeren. I samme inkluderede fil skal du løbe brugere i databasen igennem og sætte alle dem, hvis klokkeslet er over 20 min. gammelt, til offline. På denne måde får du præcis samme resultat, som hvis du brugte Sessions.
Nu håber jeg sørme, det er brugere, der er logget ind, ellers skal det laves lidt anderledes - måske med IP?

Men her er i hvert fald løkken, som sætter folk til offline:
------------------------------------------------------------
strSQL = "SELECT [id] FROM [users] WHERE [online] = true AND [lastlogin] < #" & DateAdd("m",-20,now()) & "#"
Set rs = Conn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then
    Do While Not rs.EOF
        Conn.Execute("UPDATE [users] SET [online] = false WHERE [id] = " & rs("id"))
    rs.MoveNext
    Loop
End If
rs.Close
------------------------------------------------------------
Håber det hjælper dig! :)
Avatar billede Jman Praktikant
19. maj 2007 - 18:12 #2
lav en "users_online.asp"

<%
timeout_sek = 70    ' timeout i sekunder
max_users = "500"    ' max antal brugere der skal tælles
cookies_check = "no"    ' skal der tjekkes om browseren accepterer cookies ["yes" / "no"]
Session.Timeout = 2

if session("usernumber") <> "" then
    application("usersonline_" & session("usernumber")) = now
else
    if InStr(1, request.servervariables("HTTP_COOKIE"),"ASPSESSIONID", 1) <> 0 or cookies_check = "no" then
        'Browseren understøtter cookies (eller der tjekkes ikke for om browseren acceptere cookies)
        For i = 1 to max_users
            if IsDate(application("usersonline_"&i)) or application("usersonline_"&i) = "" then
                if application("usersonline_"&i) = "" then
                    session("usernumber") = i
                    i = max_users
                elseif DateDiff("s",application("usersonline_"&i),Now) > timeout_sek then
                    session("usernumber") = i
                    i = max_users
                end if
            end if
        next
        application("usersonline_"&session("usernumber")) = now
        application("userinfo_" & session("usernumber")) = "[" & Request.ServerVariables("REMOTE_HOST") & "]</td><td nowrap>[" & Request.ServerVariables("HTTP_ACCEPT_LANGUAGE") & "]</td><td nowrap>[" & now & "]"
        if application("usersonline") < session("usernumber") then
            application("usersonline") = session("usernumber")
        end if
    elseif request("mode") <> "check" then
        response.redirect Request.ServerVariables("SCRIPT_NAME") & "?mode=check"
    else
        'Browseren understøtter ikke cookies
        response.write "Din browser understøtter ikke cookies"
    end if
end if

if application("usersonline") = "" then
    application("usersonline") = 1
end if

For i = 1 to application("usersonline")
    if len(application("usersonline_"&i)) then
        if DateDiff("s",application("usersonline_"&i),Now) > timeout_sek then
            application("usersonline_"&i) = ""
            application("userinfo_"&i) = ""
        else
            usersonline = usersonline+1
        end if
        max_i = i
    end if
next

application("usersonline") = max_i

response.write usersonline
%>








Herefter kan du kalde den fil, hvor du skal vise online brugere ved
<p>Online: <!-- #include file="users_online.asp"--></p>
Avatar billede w13 Novice
19. maj 2007 - 18:22 #3
Sessions sløver i øvrigt din hjemmeside og er du så heldig helt at undgå Sessions på din side, bør du sætte en @ Enablesessionstate = False allerøverst på dine sider, da serveren ellers vil tage forbehold for Sessions og derfor alligevel være lidt sløv. =)
Avatar billede Slettet bruger
19. maj 2007 - 19:13 #4
superiors eksempel var præcis hvad jeg ledte efter :)
Tak for det :)
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