Toon posts:

[PHP] Actieve users tellen ...

Pagina: 1
Acties:

Verwijderd

Topicstarter
Is er een mogelijkheid om bij te houden hoeveel gebruikers er gebruik maken van je site? En op die manier dus het actieve aantal users te tonen?

Wellicht een functie die telt hoeveel sessions er actief zijn o.i.d.

Denk dat er wel meer mensen zijn die deze feature leuk vinden om op hun site te hebben, dus denk even mee ;)

Alex.

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Je moet iedere gebruiker een sessie meegeven met in de database de tijd dat hij voor het laatst je site bezocht heeft. En dan tel je het aantal bezoekers dat de laatste 10/20 seconden je site bezocht hebben.

Verwijderd

IPs + laatst actief tijd opslaan. Vervolgens bij elke view (of nog mooier, met een cronjob) de records weggooien waar de actief tijd kleiner is dan 10 minuten (oid) geleden.

En dan zijn het aantal actieve gebruikers het aantal records in je db :)

edit: Wat elnino zegt dus ;)

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op maandag 01 juli 2002 15:09 schreef Zef het volgende:
edit: Wat elnino zegt dus ;)
Alleen jij pakt het net weer op een andere manier aan. Zo zie je maar weer: met programmeren leiden er meerdere wegen naar Rome en dat maakt programmeren zo interessant... :)

Verwijderd

Topicstarter
Ja precies...

Bij elke view je db checken wordt was heftig... Misschien als de huidige timestamp deelbaar is door 3 ofzow (restgetal nul).

Maar wat zou je dan opslaan? session_id + expiry-time, en bij elke pageview updaten? Vervolgens checken of expiry-time voorbij is en dan record verwijderen. Hmm...

Smart thinking ;)

Verwijderd

Ja, het is 2 queries per pagina. Dat is misschien voor een (naar mijn idee wat nutteloze) feature wat veel, maar je moet het zelf weten ;)

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op maandag 01 juli 2002 15:12 schreef Oscar Alexander het volgende:
Bij elke view je db checken wordt was heftig... Misschien als de huidige timestamp deelbaar is door 3 ofzow (restgetal nul).
Er zijn php-programma's die elke keer dat iemand de pagina bezoekt 10 query's uitvoeren. Dus 1 query of 2 query's valt best mee en is best te doen. Zeker als je een database als MySQL hebt, die vrij snel is, zul je er niet echt veel van merken. :)

edit: Maar mocht het veel performance kosten dan kun je altijd nog even kijken hoe belangrijk die functie is.

  • TweakBoy
  • Registratie: Augustus 2001
  • Laatst online: 20:27

TweakBoy

---

Op maandag 01 juli 2002 15:14 schreef Zef het volgende:
Ja, het is 2 queries per pagina. Dat is misschien voor een (naar mijn idee wat nutteloze) feature wat veel, maar je moet het zelf weten ;)
Nutteloos? Scheld je daarmee ook het T.net FP uit?
die heeft het namelijk ook... :9

---


Verwijderd

Topicstarter
1 query eigenlijk. Die andere wordt dus sporadisch maar frequent genoeg uitgevoerd... Althans, als je genoeg bezoekers krijgt :)

Verwijderd

Topicstarter
Hmm... Ben benieuwd of T.net het gedaan heeft dan. Ik weet wel dat je met ASP heel simpel gebruik kan maken van het Application object om dat op te vragen...

Jammer dat je in PHP een beunoplossing moet zoeken :(

  • TweakBoy
  • Registratie: Augustus 2001
  • Laatst online: 20:27

TweakBoy

---

Zelf laat ik om de 5 minuten een DELETE commando om mijn MySQL database los om sessies die ouder zijn dan 10 minuten te verwijderen....

gewoon met:
PHP:
1
<?// hier boven natuurlijk al een db koppeling :Pif(!(date("i") % 5)){$now = date("U") - $sess[max_time];$now = date("Y-m-d H:i:s", $now);mysql_query("DELETE FROM u_online WHERE s_time < $now");}?>

dit heb ik gewoon op de FP staan, uiteraard kan dit ook via crontab...

---


Verwijderd

Topicstarter
Ervanuitgaande dat je elke minuut een bezoeker hebt natuurlijk ;)

Verwijderd

Topicstarter
Toch raar, als ik dit doe:

$nu = date("i") - 30;
print date("Y-m-d H:i:s", $nu);

Krijg ik dit: 1970-01-01 01:00:12

:?

-[EDIT]--

Problem solved... Je moet dus echt date("U"); gebruiken.

Verwijderd

$nu = time();

En nog wat, je kan ook (zoals ik heb) je eigen sessionhandler schrijven zodat je sessions in je db worden opgeslagen, daarin zit dan meteen de garbagecollect functie, die afgebroken sessions verwijderd (moet je wel even zelf schrijven die functie dan)

Ook bestaat er in php zoiets als:
DIT!

waarmee je de status van de browser bij kan houden (moet je dus wel iets maken als: while(TRUE) doe browsercheck...)

heb het zelf nog niet getest

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 20:38
De oplossing van elnino (eerste reactie) is toch echt de fraaiste, eventueel aangevuld met crons.

Verwijderd

Op maandag 01 juli 2002 15:16 schreef TweakBoy het volgende:
[..]
Nutteloos? Scheld je daarmee ook het T.net FP uit?
die heeft het namelijk ook... :9
Die gebruikt toch al een member systeem en houdt toch al sessies e.d. bij. Als je dat niet doet zijn dit vrij dure operaties die weing functioneels toevoegen.

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Op maandag 01 juli 2002 15:18 schreef Oscar Alexander het volgende:
Hmm... Ben benieuwd of T.net het gedaan heeft dan. Ik weet wel dat je met ASP heel simpel gebruik kan maken van het Application object om dat op te vragen...

Jammer dat je in PHP een beunoplossing moet zoeken :(
Ook met php kan je over een tijdje gebruik maken van Application objecten: http://www.vl-srm.net. Jammer dat ze het nog niet stabiel genoeg vinden en dat hosters het nog apart moeten installeren.

Verwijderd

Op maandag 01 juli 2002 15:18 schreef Oscar Alexander het volgende:
Hmm... Ben benieuwd of T.net het gedaan heeft dan. Ik weet wel dat je met ASP heel simpel gebruik kan maken van het Application object om dat op te vragen...

Jammer dat je in PHP een beunoplossing moet zoeken :(
Wat heeft T.net met ASP te maken? Het draait helemaal op PHP hoor :?

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op maandag 01 juli 2002 15:18 schreef Oscar Alexander het volgende:
Hmm... Ben benieuwd of T.net het gedaan heeft dan. Ik weet wel dat je met ASP heel simpel gebruik kan maken van het Application object om dat op te vragen...
Tweakers heeft een systeem met sessies waar wordt bijgehouden waarneer je de pagina voor het laatst bezocht hebt. Deze informatie wordt onder andere gebruikt om jou te tonen welke artikelen nieuw voor jou zijn. Deze informatie is er dus al en hoeft dus niet speciaal voor dit systeem gemaakt worden. Bovendien heeft de frontpage ook nog eens een wisselende titel, dus de aanroepquery zal maar een in drie keren voorkomen.

Bij Tweakers hoeven die sessie's ook niet direct verwijderd worden, omdat ze niet alleen voor het aantal actieve users tellen bedoeld zijn. Eigenlijk is zoiets alleen relevant als je het in combinatie doet met een andere toepassing, maar het kan een leuke toevoeging zijn voor je homepage, mits hij niet de hele tijd op nul staat, uiteraard. Dat staat namelijk nogal onprofessioneel. ;)

Verwijderd

Het "updaten" van een visit (dus timestamp verversen) kan je immers samen doen met het updaten/ophalen van je sessie-variabelen... tenminste als je gebruikt maakt van een zelf gemaakte sessie-afhandeling systeem dat werkt met een dbase.

Voor php is dit te doen met: http://www.php.net/manual/en/function.session-set-save-handler.php

In je "session_date" tabel gooi je dan een extra kolom met timestamp, en in de functie "function write ($id, $sess_data)" zorg je er dan voor dat die timestamp vervest wordt.

Je moet wel van 1 punt uitgaan: de bezoeker moet op "elke" pagina sessies gebruiken ;)

EDIT: en zo kan je dus heel simpel alle rijtjes uit je "session_data" halen met een timestamp binnen een bereik van bijv. 5 minuten.
Pagina: 1