02. juli 2004 - 14:36Der er
33 kommentarer og 1 løsning
hvem er online
Hej!
På min side bruger en session-cookie når brugere logger ind. Den bruger jeg så til at vise deres brugernavn på siden. hvis jeg nu vil lave en liste som brugere der er logget ind kan se, der skal indeholde alle de brugernavne der også er logget ind. Hvordan katten gør jeg det ? Jeg har i forvejen en global.asa der viser hvor mange bruger der i øjeblikket er online. Jeg ved ik om det kan bruges til noget ?
mm12010 > Jeg forstår ikke det sidste i den artikel! Skal de sidste 3 procedure og funktioner sættes ind i global.asa ? Og hvordan kalder jeg dem fra siden så ?
<% ' --- procedure til at tilføje en online bruger --- Denne skal være sammen med login Sub AddOnlineUser() Application.Lock Application("OnlineUsers") = Application("Onlineusers") & Session("Username") & "," Application.UnLock End Sub ' --- funktion som retunerer antallet af online brugere --- Denne lægger antallet af online brugere i variablen 'CountOnLineUsers ' 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 --- Denne udskriver listen med brugere Sub WriteOnLineUsers() Dim arrUsers Dim n ' --- lav et array med online brugere --- arrUsers = Split(Application("Onlineusers"), ",") ' --- udskriv liste --- For n = 1 To UBound(arrUsers) -1 Response.Write(arrUsers(n) & "<br>") Next End Sub %>
Så det vil sige at jeg når jeg har godkendt login så fyrer jeg denne af : ' --- procedure til at tilføje en online bruger --- Denne skal være sammen med login Sub AddOnlineUser() Application.Lock Application("OnlineUsers") = Application("Onlineusers") & Session("Username") & "," Application.UnLock End Sub
Og når jeg vil udskrive antal online så har jeg denne på siden : 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
og laver en response.write CountOnLineUsers()
og den her skal simpelhen bare stå der hvor brugernavne skal skrive ud ?
og den her skal simpelhen bare stå der hvor brugernavne skal skrive ud ? Sub WriteOnLineUsers() Dim arrUsers Dim n ' --- lav et array med online brugere --- arrUsers = Split(Application("Onlineusers"), ",") ' --- udskriv liste --- For n = 1 To UBound(arrUsers) -1 Response.Write(arrUsers(n) & "<br>") Next End Sub
<SCRIPT LANGUAGE="VBScript" RUNAT="Server"> Sub Application_OnStart Application.Lock Application("OnlineUsers") = "," Application.UnLock End Sub
Sub Session_OnEnd If Len(Session("UserName")) > 0 Then Application.Lock Application("OnlineUsers") = Replace(Application("OnlineUsers"), Session("Username") & ",", "") Application.UnLock End If End Sub
</SCRIPT>
Min login-side :
<% Option Explicit
if Request.ServerVariables("REQUEST_METHOD") = "POST" then
' Databaseforbindelse - husk at angive sti til din database Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("../db/bruger.mdb") Conn.Open DSN
' SQL forespørgsel strSQL = "Select * from brugerdata where brugernavn = '" & strBrugernavn & "' and kodeord = '" & strKodeord & "'"
set rs = conn.execute(strSQL)
if (not rs.bof) or (not rs.eof) then session("userID") = rs("Brugernavn") session("username") = session("userid") Sub AddOnlineUser() Application.Lock Application("OnlineUsers") = Application("Onlineusers") & Session("Username") & "," Application.UnLock End Sub
response.redirect "../../redirect.htm" else Response.Redirect "logadmin.asp?msg=" & Server.URLEncode ("Brugernavn eller kodeord forkert!") end if
Conn.Close Set Conn = Nothing end if %>
Jeg sætter session("username") = session("userid") fordi det hedder min loginsession!
Og så min indexfil hvor det skal stå :
<tr> <td class="text1" valign="top"><span class="head">»<b class="head2"> Online brugere</b></span></td> </tr> <tr> <td class="text1" valign="top"> <% 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 response.write ("Online brugere: ") Response.Write CountOnlineUsers() %> </td> </tr>
<tr> <td class="text1" valign="top"> <% Sub WriteOnLineUsers() Dim arrUsers Dim n ' --- lav et array med online brugere --- arrUsers = Split(Application("Onlineusers"), ",") ' --- udskriv liste --- For n = 1 To UBound(arrUsers) -1 Response.Write(arrUsers(n) & "<br>") Next End Sub Call WriteOnlineUsers() %>
<% 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 response.write ("Online brugere: ") Response.Write CountOnLineUsers End Function
Min index.asp side ser nu således ud der hvor det skal ud. Det virker ikke!
<td class="text1" valign="top"> <% 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 response.write ("Online brugere: ") Response.Write CountOnLineUsers End Function %> </td> </tr> <tr> <td class="text1" valign="top"> <% Sub WriteOnLineUsers() Dim arrUsers Dim n ' --- lav et array med online brugere --- arrUsers = Split(Application("Onlineusers"), ",") ' --- udskriv liste --- For n = 1 To UBound(arrUsers) -1 Response.Write(arrUsers(n) & "<br>") Next End Sub Call WriteOnlineUsers() %> </td> </tr>
Det kan godt være jeg spørger dumt, men skal den sub : Sub WriteOnLineUsers() Dim arrUsers Dim n ' --- lav et array med online brugere --- arrUsers = Split(Application("Onlineusers"), ",") ' --- udskriv liste --- For n = 1 To UBound(arrUsers) -1 Response.Write(arrUsers(n) & "<br>") Next End Sub
fil.asp: ------------------------------------------------------ <% dim strBrugernavn, strKodeord
strBrugernavn = "mm12010" strKodeord = "mm12010"
Function CountOnLineUsers() Dim arrUsers arrUsers = Split(Application("OnlineUsers"), ",") CountOnLineUsers = UBound(arrUsers) - 1 End Function
Function WriteOnLineUsers() Dim arrUsers, n arrUsers = Split(Application("Onlineusers"), ",") For n = 1 To UBound(arrUsers) -1 Response.Write arrUsers(n) & "<br>" Next End Function
If strBrugernavn = strKodeord then Session("userID") = strBrugernavn Session("Username") = Session("userID") Application.Lock Application("OnlineUsers") = Application("OnlineUsers") & Session("Username") & "," Application.UnLock End If
global.asa: ------------------------------------------------------ <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> Sub Application_OnStart Application.Lock Application("OnlineUsers") = "," Application.UnLock End Sub
Sub Session_OnEnd If Len(Session("UserName")) > 0 Then Application.Lock Application("OnlineUsers") = Replace(Application("OnlineUsers"), Session("Username") & ",", "") Application.UnLock End If End Sub </SCRIPT>
Hmm....det er sgu underligt... Nu virker det som jeg lavede det til at starte med. Kom til at tænke på at prøve og slette alle midlertige filer og offlline indhold. Så virkede det..... Men nu kan jeg kun få det til at virke nogle gange............nogle gange skal jeg trykke F5 for at opdatere før det virker og andre gange som ligenu .... ja så vil den slet ikke...kan der være et eller andet man skal ?
Hmm...jeg har fundet ud af at hvis jeg går ind på min side står der 0 i online brugere og ingen navne online. Hvis jeg skriver /fil.asp som er din fil så skriver den fint det ud du har lavet OG trykker jeg så tilbage til min indexside så står der 1 bruger online og så står der mm12010 i navne online. Hvad sker der ?
hmm...fandt fejlen....nu virker det næsten.... Desværre bruger jeg en fil der reloader hele siden når man logger ind. Det betyder at hver gang man trykker F5 så tæller online users 1 op og login navnet skrives igen. Som du kan se eller test på www.darkzone.dk og logge ind med test3 og test3 Kan man gøre noget ved det `?
If strBrugernavn = strKodeord then Session("userID") = strBrugernavn Session("Username") = Session("userID") If Instr(1, Application("OnlineUsers"), Session("Username"),1)=0 Then Application.Lock Application("OnlineUsers") = Application("OnlineUsers") & Session("Username") & "," Application.UnLock End If End If
Nu skriver den navnet 2 gange (mod 3 før) Men .... til gengæld så skriver den intet i online users. Jeg ved godt at den ikke burde hænge sammen med det andet, men det er hvad der sker!
Jeg vil meget gerne sætte flere point i spgm, hvis du gider hjælpe mere!
Jeg tror mit problem før var at den tit hentede siden fra min cache. Nu har jeg prøvet at sætte de her ind på min index-side. Det hjalp, men for hver gang jeg trykker opdater så skriver den mit navn 2 gange mere på listen og så lægger den 1 til online brugere <meta http-equiv="Cache-Control" content="no-store"> <meta http-equiv="Pragma" content="no-cache">
Nej nej nej nej...UNDSKYLD....det virker fint....jeg tog mig lige sammen engang og opdagede at koden for at skrive online brugere ud, lå der 2 gange.....sorry :o)
Men der er en ting jeg ik helt forstår. Når jeg logger på første gang står der 0 i online brugere. Når den næste logger på står der 1, men de er jo 2 på..... ??
Kan du så ikke lige poste HELE dette der fungere, for jeg tror at jeg er tæt på at have samme fejl som dig.
Synes godt om
Ny brugerNybegynder
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.