[ASP] Tellen van ingelogde users

Pagina: 1
Acties:

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 09-08 00:05
Ik wil d.m.v. VBScript (IIS5/Win2k) het aantal actieve ingelogde gebruikers tellen op een site!
Op zich werkt het, en is het normaal niet zo moeilijk...
Ik kan bij de ASP file waar hij geautoriseerd word natuurlijk een Application variabele met 1 optellen, en wanneer hij uitlogt via een link weer met 1 aftrekken!

Maar wat nou wanneer hij niet op "Logout" klikt maar gewoon de browser afsluit, hoe detecteer ik in ASP dat hij de browser afsluit i.p.v. op "Logout" klikt :? :? :?

Please help me!

  • Vigory
  • Registratie: November 2000
  • Laatst online: 15-04 10:26
Via de global.asa kan je code uitvoeren op het moment dat een sessie eindigt.

Meer info bijv:
http://www.w3schools.com/asp/asp_globalasa.asp

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 09-08 00:05
Tja, dit bijvoorbeeld heb ik gedaan -->

<script language="vbscript" runat="server">Sub Application_OnStart
Application("visitors")=0
End SubSub Session_OnStart
Application.Lock
Application("visitors")=Application("visitors")+1
Application.UnLock
End SubSub Session_OnEnd
Application.Lock
Application("visitors")=Application("visitors")-1
Application.UnLock
End Sub</script>


Maar dat doet niet wat ik wil, zodra ik op "Logout" klik, loopt de Session van Global.asa gewoon nog door, heb ik ook getest..
Als ik dus met bovenstaande code de browser afsluit dan word Application("visitors") niet verlaagd met 1 :'(

Dus hoe check ik of de gebruiker de browser afsluit?

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08-2025
Je moet uw session.timeout op 1 zetten ofzo. STandaard staat dat op 20 minuten geloof ik. Dwz dat na 20 minuten uw sessie maar is beëindigd

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 09-08 00:05
Op vrijdag 28 juni 2002 15:41 schreef -Avalanche- het volgende:
Je moet uw session.timeout op 1 zetten ofzo. STandaard staat dat op 20 minuten geloof ik. Dwz dat na 20 minuten uw sessie maar is beëindigd
Maar dat betekent dat de sessie die ik nodig heb toch ook in 1 minuut expired? En dat moet absoluut niet!
Hij staat geloof ik nu op 30 minuten!

...

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 13:14

TeeDee

CQB 241

* TeeDee thinks dat ik de draad maar eens wat begrijpender ga lezen...
sloeg nergens op wat ik zei

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Vigory
  • Registratie: November 2000
  • Laatst online: 15-04 10:26
Op vrijdag 28 juni 2002 15:58 schreef Urk het volgende:
Maar dat betekent dat de sessie die ik nodig heb toch ook in 1 minuut expired? En dat moet absoluut niet!
Hij staat geloof ik nu op 30 minuten!
Er zijn maar 2 mogelijkheden om af te vangen wanneer iemand zijn browser sluit:
- Het einde van een sessie afvangen. Hierop moet je inderdaad 30 minuten wachten. Dan weet je pas zeker dat een gebruiker echt weg is. Je zou er trouwens ook 10 of 15 minuten van kunnen maken.
- Een javascriptje wat een code aanroept op het moment dat iemand zijn browser afsluit. Dit is echter nooit 100% proof te krijgen (verbinding kan worden verbroken, werkt niet in elke browser enz). Bovendien is het behoorlijk ingewikkeld.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

Een tellertje in een Application variabele is het makkelijkste, en geeft een leuke indicatie van hoeveel bezoekers er zijn. Als je bv alleen de bezoekers wilt tellen die de laatste 5 minuten aktief zijn geweest, zul je iets anders moeten verzinnen, bv met een databaseje, maar daarmee maak je het imho jezelf een stuk moeilijker, en zou ik het lekker met een Application variabele oplossen.

Exact expert nodig?


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 09-08 00:05
Ja ik heb het ook gedaan met Application variabelen.
Maar ik dacht dat als je je browser afsluit dat hij dan ook je Session vars killed! Maar dus wel na de timeout van een sessie word alles gekilled...

Dus dan word alles in Session_OnEnd uitgevoerd...?

  • Ashbjorn
  • Registratie: Maart 2001
  • Laatst online: 07-04-2019

Ashbjorn

Who's your daddy! WHUZAAA

Kan me niet meer herrineren wat ik daarvoor gebruikt heb.
Waar ik wel achter gekomen ben is dat niet alle hosters deze code toelaten. Wellicht omdat andere code dan ook uit te voeren valt wat wellicht weer de veiligheid in gedrang brengt ofzo.

Weet het verder ook niet precies alleen dat een counter nog wel werkt van normale users maar active users verschijnt niet op me site online maar wel lokaal, dus mijn aanneming dat ze dat dus blokkeren :?

Athlon 64 3500+ || MSI Neo2 Platinum || 1GB PC3200 Corsair XLPRO 2-2-2-5@1T || Hitachi SATA 250GB@7200 8MB || WD Raptor 73GB@10000 8MB || AOpen GF 6800 GT 256MB || SB Audigy2 Platinum || Logitech Laser G5 || 19" Iiyama HM903DT || 1280@100Hz


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Deze methode is niet echt betrouwbaar, voor grappige doeleinde is het geen probleem, wil je echt betrouwbaar iets dan kan je het beter via database bijhouden.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

Op maandag 01 juli 2002 11:35 schreef Urk het volgende:
Dus dan word alles in Session_OnEnd uitgevoerd...?
Als je sessie uittimed (;)), of wanneer je handmatig de sessie killed (Session.Abandon) wordt de Session_OnEnd uitgevoerd.

En tis idd zeker geen betrouwbare methode, maar voor ".. bezoekers online" in de title van je site issie wel goeg genoeg. Als je het voor de statistieken wilt kun je imho beter een goeie counter plaatsen die per tijdseenheid kan laten zien hoeveel hits er waren.

Exact expert nodig?


  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29

rik

Heb ik toch ook even een vraagje:

Global.asp in directory ./test
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script language="vbscript" runat="server">

Sub Application_OnStart
     Application("visitors")=0
End Sub

Sub Session_OnStart
Application.Lock
Application("visitors")=Application("visitors")+1
Application.UnLock
End Sub

Sub Session_OnEnd
Application.Lock
Application("visitors")=Application("visitors")-1
Application.UnLock
End Sub

</script>


deel van de code in test.asp in directory ./test
ASP:
1
2
Er zijn <%=Application("visitors")%>
medewerkers aanwezig.



In IIS heb ik bij de directory-eigenschappen van ./test er een Applicatie van gemaakt, met script-access en medium security (pool).

Ik krijg het hele gebeuren echter niet aan de praat. De output die ik krijg is:

code:
1
Er zijn medewerkers aanwezig


Voor de rest werk ik gewoon met sessions, en daarvan is er een actief (er wordt van te voren ingelogd).

Ziet iemand of ik iets over het hoofd zie?

[ Voor 16% gewijzigd door rik op 08-07-2003 13:13 . Reden: enters verbeterd ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Ik zou sowieso eens een aantal enters extra in je script rammen...

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Bij mij werkt het perfect.
Waarom heb je bij de directory eigenschappen er Applicatie van gemaakt?
Dat is toch nergens voor nodig?

  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29

rik

robjanssen schreef op 08 July 2003 @ 12:57:
Bij mij werkt het perfect.
Waarom heb je bij de directory eigenschappen er Applicatie van gemaakt?
Hmm.. hier dus niet.


http://www.asp101.com/resources/apps_sessions_gasa.asp:
In order for the web server to know to look for this file (Rik: Global.asa) you need to set up your directory as an application in IIS. This is done by navigating to the appropriate web site or directory in Internet Services Manager and right clicking on it and selecting "Properties" from the pop up menu. Then select the "Directory" or "Home Directory" tab and on the bottom half of that window you will see the "Application Settings" section. If it's not already, you need to make the directory an application by pressing the "Create" button. Click "Ok" to save the setting and exit.
Bij mij stond dit dus inderdaad uit, vandaar dat ik het aan heb gezet (Create).

Verwijderd

Urk schreef op 01 July 2002 @ 11:35:
Ja ik heb het ook gedaan met Application variabelen.
Maar ik dacht dat als je je browser afsluit dat hij dan ook je Session vars killed! Maar dus wel na de timeout van een sessie word alles gekilled...

Dus dan word alles in Session_OnEnd uitgevoerd...?
een sessie beëindig je in ASP met:
ASP.NET Visual Basic:
1
 session.Abandon()

  • MisterData
  • Registratie: September 2001
  • Laatst online: 19:41
Je kunt ook in je user-tabel een veld 'last login time' bijmaken. Die wordt dan geupdate wanneer iemand inlogt en dingen doet. Als je wil tellen dan tel je gewoon de users die de afgelopen 5 minuten actief zijn geweest :)

[ Voor 7% gewijzigd door MisterData op 08-07-2003 13:45 ]


  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29

rik

Ik probeer het nu op een ander systeem, en daar werkt het wel :?
vaag... (sorry niet bedoeld als kick)

Misterdata: is inderdaad een idee, alleen krijg ik het nooit echt goed voor elkaar om data (als in datum) in een database te proppen. De ASA manier vind ik overigens mooier :)


Update:
Potverdorie, ik zit op een "mirror" systeem te veranderen zie ik nu :( (ofwel de gegevens die ik heb gekregen kloppen niet). Dat kan wel eens een hoop verklaren O-)

Update2:
Hoppa, op de JUISTE SERVER nu dus Create gedrukt (IIS -> Directory Properties -> "Directory" -> " Application" -> " Create") en tja nu werkt het wel..

Heb ik dus eigenlijk voor niks gepost :*)

[ Voor 109% gewijzigd door rik op 08-07-2003 14:26 ]


Verwijderd

Benadering die ik gebruikt heb:

Als iemand netjes uitlogt verlaag je de teller met het aantal users en je zet een sessie variabele "loggedoff" op true.

In de Session_OnEnd controleer je eerst of de gebruiker al loggedoff is. Zo niet dan verlaag je de teller.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 08 July 2003 @ 17:41:
Benadering die ik gebruikt heb:

Als iemand netjes uitlogt verlaag je de teller met het aantal users en je zet een sessie variabele "loggedoff" op true.

In de Session_OnEnd controleer je eerst of de gebruiker al loggedoff is. Zo niet dan verlaag je de teller.
Wordt dat event sowieso al niet aangeroepen bij een Session.Abandon? :?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • rik
  • Registratie: April 2000
  • Laatst online: 17-08 12:29

rik

Wordt dat event sowieso al niet aangeroepen bij een Session.Abandon?
Klopt, dat is het idee.
Pagina: 1