[PHP+MySQL] Users online op een website

Pagina: 1
Acties:
  • 763 views sinds 30-01-2008
  • Reageer

  • Tuinhark
  • Registratie: April 2000
  • Laatst online: 06-01 10:05
Nav een vraag van Terranca (gathering.tweakers.net/showtopic/51941) leek het me handig dit geintje even uit te leggen. :)

Een seminar... :P<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>Tuinhark -> Jij hebt die YapBB gemaakt? Ik zie namelijk in de screens dat er staat There is currently 1 user logged in. Hoe krijg je dat in godesnaam voor mekaar? Je kan wel een update query doen in de MySQL DB, maar dan kan je het niet meer terugtoveren als die kerel de pagina verlaat.[/quote]Wanneer een user ingelogd is (ik gebruik hier PHP4 sessions voor), wordt tijdens iedere aanroep van een YapBB pagina de volgende query aangeroepen:<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>"INSERT INTO useronline (userid, date) VALUES ('$sessionUserID', '" . time() . "');"[/quote]Daarna (als je wilt weten hoeveel users er zijn ingelogd):<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>"DELETE FROM useronline WHERE date < $tijd"[/quote]Waarbij $tijd = time() - $cfgOnlineTime (bv 10 * 60 => 10 minuten).

En<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>"SELECT DISTINCT userid FROM useronline"[/quote]Ehm, duidelijk dus? Vragen? :)

:Y)

Verwijderd

<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>Op 11 oktober 2000 19:44 schreef Tuinhark het volgende:
Een seminar... :PEhm, duidelijk dus? Vragen? :)

:Y)[/quote]*applaus*
Uhm, nee dus ... hey cool, ik zal ook weleens een grappig stukje seminar doen. :) Goed idee man :)

  • Terranca
  • Registratie: April 2000
  • Laatst online: 14:47
veeet :)

thnx, het is me weer helemaal duidelijk.

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 02-01 21:53

Apache

amateur software devver

<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>Op 11 oktober 2000 19:44 schreef Tuinhark het volgende:

Vragen? :)

:Y)[/quote]Nope, wel een opmerking, dit ruled, natuurlijk kunnen we dan weer de discussie beginnen dat het niet 100% perfect is omwille van de 10 minuten enz, maar ik ben zeer tevreden :)

Tuinhark:Y) rules

If it ain't broken it doesn't have enough features


  • Tuinhark
  • Registratie: April 2000
  • Laatst online: 06-01 10:05
Ongein... :)

:Y)

  • $tranger
  • Registratie: Januari 2000
  • Laatst online: 11-12-2025
Okay, is vet, maar als ik het goed begrijp werkt het zo:

er opent iemand een pagina op jouw forum en als ie binnen 10 minuten een nieuwe pagina opent blijft ie online staan, als ie geen pagina opent/browser sluit, dan is ie na 10 minuten niet meer online?

Het werkt wel, alleen jammer dat je het niet net zo realtime kan maken als een java applet :(

Verwijderd

Kan niet nee, maar om voor dit soort functionaliteit een java applet te laten laden door de bezoeker is weer een beetje teveel van het goede...

Ik zou iig niet vaak meer op die pagina komen.

  • Tuinhark
  • Registratie: April 2000
  • Laatst online: 06-01 10:05
$tranger snapt hem. :)

:Y)

  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021

Prutser_IA

<*{{{><

10 minuten is tijd zat..
als iemand namelijk geen pagina opent binnen 10 minuten, dan is die persoon naar mijn mening niet echt actief meer aan het surfen

42


Verwijderd

en misschien is het ook een ID om bij <body onUnload=""> wat neer te zetten, werkt niet altijd even veilig, maar die keren dat het werkt is het iig toch een stuk interactiever niewaar???

  • Tuinhark
  • Registratie: April 2000
  • Laatst online: 06-01 10:05
Ik snap waar je heen wilt... Misschien valt daar idd wat mee te doen. Maar die onUnload werkt toch alleen als je het browser window sluit? Of wordt die ook aangeroepen wanneer je verder surft?

Maar goed, we gaan even uit van het laatste geval. Laten we bij die onUnload een aanroep zetten naar een PHP script die alle tupels van een userid wist. (in een nieuw window)

Dat kán kromlopen. Dus: dan wordt in het 1e window al de nieuwe pagina aangeroepen en daarna in het 2e window alles weer gewist.

Lijkt me niet echt handig...

Iemand een andere visie? :)

:Y)

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 28-12-2025
Zelfde geintje in ASP maar nog veel mooier!!

Deze global.asa gebruiken:

<SCRIPT LANGUAGE="VBScript" RUNAT="Server">

Sub Sesion_Onstart
Application.Lock
Application( "customerCount" ) = Application( "customerCount" ) + 1
Application.Unlock
End Sub

Sub Session_OnEnd
Application.Lock
Application( "customerCount" ) = Application( "customerCount" ) - 1
Application.Unlock
End Sub

Sub Aplication_OnStart
Aplication( "customerCount" ) = 0
End Sub

Sub Aplication_OnEnd
End Sub


Nu kun je wanneer je maar wilt overal in je asp pagina doormiddel van

<%=Aplication( "customerCount" )%>

het aantal actieve gebruikers weergeven. Niks geen overhead van databases :)

Kan zoiets niet met PHP?

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 25-11-2025

dusty

Celebrate Life!

DDD : op die manier heb je wel een timeout van 20 minuten!
(standaard kan je natuurlijk in IIS aanpassen..)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>Op 16 oktober 2000 11:04 schreef dusty het volgende:
DDD : op die manier heb je wel een timeout van 20 minuten!
(standaard kan je natuurlijk in IIS aanpassen..)[/quote]Op die andere manier heb je 'n timeout van 10 minuten, what's your point? sterker nog
de "manier" van werken heeft echt bar weinig te maken met een timeout.

--Ray

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 25-11-2025

dusty

Celebrate Life!

<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>Op 16 oktober 2000 11:28 schreef Yarvieh het volgende:
Op die andere manier heb je 'n timeout van 10 minuten, what's your point? sterker nog
de "manier" van werken heeft echt bar weinig te maken met een timeout.

--Ray[/quote]standaard van IIS voor het verlopen van een sessie staat op 20 minuten. De mensen die geen toegang hebben tot de configuratie van IIS zelf kunnen dit dus niet veranderen. Op de andere manier kan je het zelf bepalen.

Om nog erger te beginnen kan men natuurlijk ook een IFRAME van 1*1 openen met een page die zichzelf herlaad na 60 seconden. betekent dat als de gebruiker 70 seconden geen pagina opvraagt dat ie vertrokken is. Denk dat je op deze manier het meest dichtbij een "real life" versie komt zonder het gebruik van Java.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Mja beetje jammer om je webserver zoveel extra hits voor z'n donder te laten krijgen alleen om te zien hoeveel users je hebt, ik denk toch dat de meeste voor de 10 of 20 minuten variant gaan ;)

--Ray

Verwijderd

Cool,
ik heb zitten zoeken bij de quickref van php, maar volges mij zit er alleen maar die $session in en kan je niks bewaren van de application zelf binnen php.
Geinig, dat asp :)

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 28-12-2025
Inderdaad, echte real-time stats klinken wel gaaf. Maar de resulterende extra serverload is gewoon niet verantwoord.

En wat boeit het nou als je een kleine onnauwkeurigheid erin hebt zitten? Ik heb dit zelfd draaien met een time-out van 15 (op een bedrijfswebsite). Het gaat om de gadget, niet om de accuratesse.
Pagina: 1