Avatar billede iggipop Nybegynder
02. juli 2004 - 14:36 Der 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 ?
Avatar billede mm12010 Nybegynder
02. juli 2004 - 14:51 #1
Avatar billede superraider Nybegynder
02. juli 2004 - 15:02 #2
Jeg ville bare lave en database, med en tabel, når en bruger logger ind, så for brugeren værdien 1, og når han logger ud, så for han 2.

så laver du en database forbindelse og for den til at liste alle dem som har værdien 1 og skriver dem i en tabel.
Avatar billede iggipop Nybegynder
02. juli 2004 - 15:07 #3
Ser spændende ud, jeg tester lige!

Hvordan ser en helt 'ren' global.asa ud ?
Avatar billede iggipop Nybegynder
02. juli 2004 - 15:12 #4
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å ?
Avatar billede mm12010 Nybegynder
02. juli 2004 - 15:17 #5
<%
' --- 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
%>
Avatar billede iggipop Nybegynder
02. juli 2004 - 15:23 #6
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 ?
Avatar billede iggipop Nybegynder
02. juli 2004 - 15:23 #7
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
Avatar billede mm12010 Nybegynder
02. juli 2004 - 15:24 #8
lige præcis !-)
Avatar billede iggipop Nybegynder
02. juli 2004 - 22:39 #9
jeg kan ik få skidtet til at virke :(
Avatar billede iggipop Nybegynder
02. juli 2004 - 22:42 #10
den skriver '0' i brugere i online og der kommer ingen navne på listen! Vil du se min kode ?
Avatar billede iggipop Nybegynder
02. juli 2004 - 23:06 #11
burde de der subs ikke allesammen ligge i global.asa ?
Avatar billede iggipop Nybegynder
02. juli 2004 - 23:17 #12
Min global.asa ser således ud :

<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

dim strBrugernavn, strKodeord

dim rs, strSQL, Conn, DSN

strBrugernavn = replace(request.form("brugernavn"), "'", "")
strKodeord = replace(request.form("kodeord"), "'", "")

' 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">&raquo;<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()
%>

                </td>
              </tr>
Avatar billede mm12010 Nybegynder
05. juli 2004 - 14:26 #13
<%
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

%>
Avatar billede iggipop Nybegynder
06. juli 2004 - 14:08 #14
hmmm...du har bare fjernet () eller hvad ?
Avatar billede mm12010 Nybegynder
06. juli 2004 - 14:31 #15
jeg har lagt response.write ind i funktionen
Avatar billede iggipop Nybegynder
06. juli 2004 - 14:46 #16
og det er rigtigt som jeg har lagt de forskellige dele i de forskellige filer ?
Avatar billede mm12010 Nybegynder
06. juli 2004 - 15:02 #17
ja, det skulle jeg mene - det kan selvfølgelig være mig der har overset noget...
Avatar billede iggipop Nybegynder
06. juli 2004 - 15:05 #18
Oki...jeg prøver lige i aften så skriver jeg om det virker !
Tak indtil videre !
Avatar billede iggipop Nybegynder
06. juli 2004 - 20:22 #19
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>

HÅBER meget du kan hjælpe!
Avatar billede iggipop Nybegynder
06. juli 2004 - 20:25 #20
Den skriver ikke engang denne linie ud ?

response.write ("Online brugere: ")
Avatar billede iggipop Nybegynder
06. juli 2004 - 20:38 #21
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

Ikke være placeret i global.asa eller ?
Avatar billede mm12010 Nybegynder
07. juli 2004 - 14:14 #22
kan du få dette til at virke?

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

Response.Write "Online brugere: "
Response.Write CountOnlineUsers() & "<br>"
Call WriteOnlineUsers()
%>

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>
Avatar billede iggipop Nybegynder
07. juli 2004 - 23:11 #23
ja det virker fint!
Avatar billede iggipop Nybegynder
08. juli 2004 - 00:18 #24
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 ?
Avatar billede iggipop Nybegynder
08. juli 2004 - 00:40 #25
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 ?
Avatar billede iggipop Nybegynder
08. juli 2004 - 00:55 #26
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 `?
Avatar billede mm12010 Nybegynder
08. juli 2004 - 08:28 #27
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
Avatar billede iggipop Nybegynder
08. juli 2004 - 11:26 #28
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!
Avatar billede iggipop Nybegynder
08. juli 2004 - 11:58 #29
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">
Avatar billede iggipop Nybegynder
08. juli 2004 - 12:28 #30
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å..... ??
Avatar billede mm12010 Nybegynder
08. juli 2004 - 13:00 #31
hvis du er sikker så prøv at fjerne -1 i denne linie:

CountOnLineUsers = UBound(arrUsers) - 1
Avatar billede iggipop Nybegynder
08. juli 2004 - 13:15 #32
Nej det virker sgu fint...skulle bare bruge din :

If Instr(1, Application("OnlineUsers"), Session("Username"),1)=0 Then 
      Application.Lock
      Application("OnlineUsers") = Application("OnlineUsers") & Session("Username") & ","
      Application.UnLock

sammen med min lille fejl...så virker det fint. MANGE tak for hjælpen!
Avatar billede mm12010 Nybegynder
08. juli 2004 - 15:20 #33
selv tak :o)
Avatar billede gadebarnet Nybegynder
18. oktober 2004 - 22:33 #34
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.
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