Archief - PHP: wie is er (niet meer) online

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

deadlock

Legacy Member
Ben even wat aan het prutsen in PHP met een systeem te maken om te zien wie op een bepaald moment op de site zit.

Werkwijze:
Bij het laden van de pagina wordt gekeken naar een sessievar $online. Staat deze op false, dan voeg ik userID en userName toe in de tabel tblOnline.

Mijn vraag is nu: hoe weet ik wanneer een gebruiker de site verlaat zodat ik hem uit tblOnline kan verwijderen?


Het kan natuurlijk zijn dat er een veel simpelere manier is om te zien wie online is, dus andere werkwijzes zijn ook welkom :).

Fr3aK

Legacy Member
Het gemakkelijkste is als je telkens dezelfde header include in je paginas.
Je moet dan in je tabel van online gebruikers nog een row met tijd zetten in de vorm van "YmdHis".
Je update je tabel telkens een ingelogde gebruiker de header opent (dus een pagina opent).
Je geeft alleen de mensen weer die binnen de laatste 2 minuten ofzo nog van pagina zijn verwisselt, dus YmdHis-120, en degenen die in die tijd niet meer zijn verwisselt van pagina delete je uit je database.
Het nadeel is dat als iemand langer dan 2 minuten op een pagina blijft hij wordt weergeven als uitgelogged, maar als hij dan terug van pagina wisselt wordt hij terug ingelogged weergegeven.
Ik gebruik bijna altijd 90 seconden interval omdat ik toch geen grote newsposts schrijf.

EDIT: Als je scriptje wil PM me dan...

Greetz

deadlock

Legacy Member
Goeie redenering, maar beetje te zwaar voor de database imo.

Per bezoeker per klik een update/insert en een delete...

Bestaat er geen andere manier in PHP om te zien dat een bezoeker de site verlaat? (ik denk bvb aan een session-destroy event)

DarkBone

Legacy Member
De manier de Freak uitlegde is de meest gehanteerde dacht ik, en PHP heeft niet zoiets als session_destroy neen :)

Ex0dus

Legacy Member
DarkBone zei:
De manier de Freak uitlegde is de meest gehanteerde dacht ik, en PHP heeft niet zoiets als session_destroy neen :)
php heeft da wel, ma ni als ge nen browser sluit :)

DarkBone

Legacy Member
Ex0dus zei:
php heeft da wel, ma ni als ge nen browser sluit :)
Ik bedoelde niet de functie session_destroy, maar meer zoals dJeeze zegt, een event die daaraan gekoppeld is.

asp(.net) kent bijvoorbeeld Session_End (ofzo) wat in een speciale file komt

BertG

Legacy Member
als je een eigen host hebt, en een scriptje maakt dat de connecties per ip telt enzo is da wel "te doen" :)

sys4096

Legacy Member
Mijn PHP is niet meer wat het geweest is maar...

Als je je sessies in de database stored, kan je deze querien. Aan de hand van de session ID's weet je welke user daar aan hangt.

Fr3aK

Legacy Member
Je kan het ook proberen met cronjobs (van 2sec ofzo) maar dat is NOG belastender. De manier die ik heb uitgelegd is niet zo belastend als het maar om 10 users gaat ofzo :( . Er is in mijn ogen geen andere oplossing, ik heb hier ook lang naar gezocht.
BTW als ge een oplossing vindt pm ze mij dan eh :D

sys4096

Legacy Member
Mja, in Java heb ik het gemaakt... is gewoon een static function die de users kan bijhouden. Maar of dat in PHP gaat...

sneax

Legacy Member
Ik zou gewoon cookie plaatsen per user, en de dbase updaten per keer hij die site bezoekt.

Als de cookie verlopen is maar de dbase entry bestaat nog -> 'ooit' bezocht.

Freakshow

Legacy Member
nog een manier:
met javascript kan je weten wanneer iemand de browser sluit. Dus anders gezegt ga je een pop-under gaan maken.
Browser sluit -> popup die automatisch opent en de user verwijderd uit de db -> popup sluit weer.

Nadelen:
popup blockers houden ALLE pop-unders tegen.
bij bepaalde brouwsers (oa. opera) kan je popup's blokkeren die je niet zelf opent (dus bij een klik mag de popup wel openen, automatische zullen ni werken).

Homer

Legacy Member
PHP blijft een server side scripting taal. Events onderscheppen die op client pc gebeuren kan dat dus niet.

Zoals dus uitgelegd geweest
een tabel in database bijhouden die elke keer de page gerfresht wordt de huidige datum wegschrijft (per userID ofcoz)

en dan query uitvoeren wie er minder dan x minuten geleden online was.

Op zich niet zo belastend voor de database. 1 query op te inserten/updaten en 1 query om af te beelden. Als ge uw KEYS dan nog een beeke te goe instelt (key op datetime veld dus) is dat een heel snelle query.

site die dat gebruikt bv : http://cq2.wxs.nl
Browserbased game met 1200 spelers en de onlinechecker queries zijn daar zeker niet de zwaarste queries! :)

killgore

Legacy Member
als je redelijk wat toegang hebt tot de server kan je altijd proberen tellen hoeveel bestanden er in de sessie map zitten.

maT'

Legacy Member
killgore zei:
als je redelijk wat toegang hebt tot de server kan je altijd proberen tellen hoeveel bestanden er in de sessie map zitten.
Ga je dan ook niet het aantal bestanden tellen voor andere sites ?
1 server gaat nl. niet alleen jouw site hosten, maar nog een tiental andere... moet je al chance hebben dat die andere sites geen sessies gebruiken.

Je kan ook een nieuwe map aanmaken op je server, bv: AantalBezoekers.
Elke keer een bezoeker nu je server bezoekt, wordt een nieuw tekstbestandje aangemaakt, in de vorm van 192.168.1.5.txt (in dit geval dan wel het IP-adres van de bezoeker), met daarin de tijd dat hij de site het laatst bezocht heeft (als die gebruiker van pagina veranderd, moet je dat .txt'tje ook veranderen).

Om te tellen hoeveel man er op dat moment online is, overloop je alle bestanden in die map AantalBezoekers, haalt er het uur uit, en kijkt of dat in de laatste 5 minuten was, zoniet, verwijder je dat bestand, is het wel zo, dan verhoog je het tellertje met 1. Je krijgt zo ook direct een proper overzicht van de IP-adressen van je gebruikers (niet dat je d'r iets mee bent, maar is wel leuk om te zien :p )

Desnoods steek je meer info in dat text bestandje, zoals de userID, locatie van de laatst bezochte pagina, gescheiden door een puntkomma, dan kan je via explode() die informatie rustig filteren.

killgore

Legacy Member
maT' zei:
Ga je dan ook niet het aantal bestanden tellen voor andere sites ?
1 server gaat nl. niet alleen jouw site hosten, maar nog een tiental andere... moet je al chance hebben dat die andere sites geen sessies gebruiken.
daarom dak zei als je zware toegang hebt tot je server. Ik kan mij niet voorstellen dat als jij toegang hebt tot je tmp folder dat er nog andere sites op die server ook staan ;).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan