---
title: "Antal online i shatten?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/43332-antal-online-i-shatten"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Jesper T"
published: "2002-05-07T22:32:17.000Z"
updated: "2002-05-09T13:36:37.000Z"
replies: 15
views: 378
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/43332-antal-online-i-shatten"
---

# Antal online i shatten?

## #1 — Jesper T, 2002-05-07T22:32Z

Hej! 
Jag har en chatt som bybber på applications med global.asa. Jag skulle vilja lista alla som för tillfället är online. Har någon något tips för detta?
Includefilen är en bamse på ca 600 rader så den tänker jag inte visa här i första taget.
Tacksam för hjälp eller tips.
MVH Jesper

I global.asa har jag detta. 

```
</SCRIPT>
<!--#include file=chat/chatapi.asp-->
Sub Session_OnStart
	Session.Timeout=3 'minutes
End Sub

Sub Session_OnEnd
	call LogOffUser(ChatSessionUidGet(),false)
End Sub
</script>
```

Permalänk: https://www.webforum.nu/p/43332

## #2 — SPiN, 2002-05-07T22:34Z

Lagra användarna i en array, som du puffar in i ett Application-objekt. När en användare loggar ut tar du bara bort han från arrayen och lagrar den editerade arrayen.

Permalänk: https://www.webforum.nu/p/670446

## #3 — Jesper T, 2002-05-07T22:46Z

Tack, men...
Det finns faktiskt en sådan funktion på "loginsidan" till chatten men den sidan includerar också den där boutafilen som jag inte har lust att beklammra min redan betyngda index-sida med. Jag skulle bara vilja ha det mest nödvändiga till det såklart. Men vettefanken hur.

På "loginsidan" har jag bl.a detta:

```
 Response.Write "<tr><td>" & UsersCountGet() & " user(s) are currently chatting"
```

 

Och sedan en liten snutt ur includen:

```
'Returns a total user count (in all chat rooms)
Function UsersCountGet()
	Dim iUserId,iCount

	iCount=Clng(0)
	for iUserId=0 to MAX_USERS-1
		if isArray(Application(iUserId & "UsrZbC")) Then iCount=iCount+1
	next
	UsersCountGet=iCount
End Function
```

Men det räcker inte att bara lägga ihop dessa grejjer, jag fettekatten faktiskt om jag skall vara ärlig.

MVH Jesper

Permalänk: https://www.webforum.nu/p/670451

## #4 — Jesper T, 2002-05-08T14:47Z

:(

Permalänk: https://www.webforum.nu/p/670713

## #5 — Jesper T, 2002-05-09T11:18Z

Jag famlar i mörker......... :(

Är det bara Lars G som kan detta?

Permalänk: https://www.webforum.nu/p/671028

## #6 — SPiN, 2002-05-09T11:24Z

Nej, jag har ju gett dig ett svar. :)

Jag läste frågan igen, och såg nu att jag missade att det var **antalet** användare du ville ha. Det gör det lite lättare att modifiera till script, du kan i global.asa lägga till det här under Application_OnStart:

```
Application ( "usersOnline" ) = 0
```

Under Session_OnStart:

```
Application ( "usersOnline" ) = cInt ( Application ( "usersOnline" ) ) + 1
```

Under Session_OnEnd:

```
Application ( "usersOnline" ) = cInt ( Application ( "usersOnline" ) ) - 1
```

Sen är det bara att hämta med Application ( "usersOnline" ).

Permalänk: https://www.webforum.nu/p/671031

## #7 — Jesper T, 2002-05-09T11:28Z

Tack igen Spin! 
Men jag vill ha **antalet online i chatten** och inte totalt online på sidan. Och hur man gör det har jag ingen som helst aning om, så snälla hjälp!

MVH Jesper

Permalänk: https://www.webforum.nu/p/671032

## #8 — icaaq, 2002-05-09T11:28Z

Skulle du inte kunna köra en UBound på arrayen

```
[red]
Function UsersCountGet()
    if isArray(Application(iUserId & "UsrZbC")) Then
       UsersCountGet=Ubound(Application(iUserId & "UsrZbC"))+1
    Else
       UsersCountGet=0
End If
End Function
[/red]
```

Jag kanske famlar i mörkret..... ;)

Permalänk: https://www.webforum.nu/p/671033

## #9 — Jesper T, 2002-05-09T11:49Z

Tack Icaaq men....

var skall jag lägga detta? 
Som jag beskrev tidigare så har jag en räknarfunktion på chattens "loginsida" men den incuderar en jätte stor includefil, detta skulle jag ju vilja undvika.
Jag provar det Spin skrev i alla fall, så får vi se.

//MVH JESPER

Permalänk: https://www.webforum.nu/p/671038

## #10 — Jesper T, 2002-05-09T12:00Z

Det ser ut så här nu i Global.asa:

```
<!--#include file=chat/chatapi.asp-->
Sub Application_OnStart
Application ( "usersOnline" ) = 0
End sub
Sub Session_OnStart
	Session.Timeout=3 'minutes
	Application ( "usersOnline" ) = cInt ( Application ( "usersOnline" ) ) + 1
End Sub

Sub Session_OnEnd
	call LogOffUser(ChatSessionUidGet(),false)
	Application ( "usersOnline" ) = cInt ( Application ( "usersOnline" ) ) - 1
End Sub
</script>
```

Men inget skrivs ut med :
Response.write Application("usersOnline")

 :(

Permalänk: https://www.webforum.nu/p/671042

## #11 — SPiN, 2002-05-09T12:05Z

Undrar om jag är trött idag... Verkar inte kunna läsa rätt. ;)

Du får göra någon sorts tillämpning, själv gillar jag inkapsling så jag hade gjort så här:

```
Class OnlineInDaChat
     Dim arrUsers
     Dim iCurrentUsers
     Dim objConnection

     Sub Class_Initialize
          set objConnection = Server.CreateObject ( "ADODB.Connection" )
          objConnection.Open "DSN=myDSN"

          Dim objRecordset
          set objRecordset = objConnection.Execute ( "SELECT fldUsername FROM tblUsersOnline ORDER BY fldUsername ASC" )

          Dim i
          ReDim arrUsers ( objRecordset.Count )
          i = 0
          Do Until objRecordset.EOF
               arrUsers ( i ) = objRecordset ( "fldUsername" )
               i = i + 1
          Loop

          objRecordset.Close
          set objRecordset = Nothing

          iCurrentUsers = i
     End Sub

     Sub Save ( ByVal strUsername )
          Dim objRecordset
          set objRecordset = objConnection.Execute ( "SELECT fldUsername FROM tblUsersOnline WHERE fldUsername = '" & strUsername & "'" )

          If objRecordset.EOF Then
               iCurrentUsers = iCurrentUsers + 1
               ReDim arrUsers ( iCurrentUsers )

               arrUsers ( iCurrentUsers - 1 ) = strUsername

               objConnection.Execute ( "INSERT INTO tblUsersOnline (fldUsername, fldSessionID, fldTime) VALUES('" & strUsername & "', '" & Session.SessionID & "', #" & Time () & "#")" )
          Else
               objConnection.Execute ( "UPDATE tblUsersOnline SET fldTime = #" & Time () & "# WHERE fldSessionID = '" & Session.SessionID & "'" )
          End If

          objRecordset.Close
          set objRecordset = Nothing
     End Sub

     Sub Clear
          objConnection.Execute ( "DELETE FROM tblUsersOnline WHERE fldTime < #" & Time () - 600 & "#" )

          Dim objRecordset
          set objRecordset = objConnection.Execute ( "SELECT fldUsername FROM tblUsersOnline ORDER BY fldUsername ASC" )

          Dim i
          ReDim arrUsers ( objRecordset.Count )
          iCurrentUsers = objRecordset.Count
          i = 0

          Do Until objRecordset.EOF
               arrUsers ( i ) = objRecordset ( "fldUsername" )
               i = i + 1
          Loop

          objRecordset.Close
          set objRecordset = Nothing
     End Sub

     Sub Close
          objConnection.Close
          set objConnection = Nothing
     End Sub

     Function Run ( ByVal strUsername )
          Call Clear
          Call Save strUsername
          Call Close

          Run = arrUsers
     End Function
End Class
```

Används så här:

```
set onliners = new OnlineInDaChat
enArray = onliners.Run ( "användarnamn" )
```

Du behöver en tabell också, enligt nedan:

```
CREATE TABLE tblUsersOnline (
         fldUsername TEXT NOT NULL, 
         fldSessionID TEXT NOT NULL, 
         fldTime DATETIME NOT NULL, 
         PRIMARY KEY(fldSessionID)
)
```

Där har du en liten klass som håller koll på dina användare i chatten. Genom att loopa ut enArray får du \[förhoppningsvis\] ut alla användare som är online - och genom att köra en uBound på enArray får du ut antalet.

Antalet sekunder är just nu satt till 600, innan en användare loggas ut.

Möjligt att det är något fel i klassen, jag konverterade min PHP-klass som gör samma sak till ASP/VBScript - och har inte testat den. :)

Permalänk: https://www.webforum.nu/p/671043

## #12 — Jesper T, 2002-05-09T12:11Z

Ha ha ha...
Tack Icaaq men....

Jag vill inte ha någon lista över VILKA som är online i chatten utan HUR MÅNGA, jag måste vara otydlig, och det är två som dansar en dålig tango.

```
<!--#include file=chat/chatapi.asp-->
Sub Application_OnStart
Application ( "usersOnline" ) = 0
End sub
Sub Session_OnStart
	Session.Timeout=3 'minutes
	Application.Lock
	Application ( "usersOnline" ) = cInt ( Application ( "usersOnline" ) ) + 1
	Application.UnLock
End Sub

Sub Session_OnEnd
	call LogOffUser(ChatSessionUidGet(),false)
	Application.Lock
	Application ( "usersOnline" ) = cInt ( Application ( "usersOnline" ) ) - 1
	Application.UnLock
End Sub
</script>
```

Jag har även lagt till Application.Lock och Application.UnLock i global.asa men det hjälpte inte. (Kan bero på att jag inte har ngn aning om vad Application.Lock & Application.UnLock har för funktion...)

MVH Jesper

Permalänk: https://www.webforum.nu/p/671047

## #13 — SPiN, 2002-05-09T12:13Z

Med min klass får du både och. Vilka som är online och hur många de är.

Lock låser Application-objektet så att det endast pågående process kan skriva till den, och UnLock låser upp låset. Bra att ha om det är många online, annars kan räknare ställas fel om två eller fler uppdaterar samtidigt.

Permalänk: https://www.webforum.nu/p/671049

## #14 — Jesper T, 2002-05-09T12:26Z

Men finns det inte ngt enkelt sätt? Tex ngt liknande som jag skrev in i global.asa (Spin)

MVH Jesper

Permalänk: https://www.webforum.nu/p/671050

## #15 — SPiN, 2002-05-09T12:27Z

Jo, det borde ju funka - men som du säger så får du inte bara användare av chatten då. Då får för hela sidan.

Permalänk: https://www.webforum.nu/p/671052

## #16 — Jesper T, 2002-05-09T13:36Z

Ja då vet jag inte riktigt vad göra?
Tillbaks på ruta ett....
Jag är hopplös!

Permalänk: https://www.webforum.nu/p/671074

---

Tråden på webben: https://www.webforum.nu/amne/asp/43332-antal-online-i-shatten
