[PHP/MySQL] Aantal mensen ingelogt?

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

  • Terranca
  • Registratie: April 2000
  • Laatst online: 02-09 22:35
Goeiemorgen!

Ik had ff een vraagje; Is het mogelijk om op een PHP/MySQL site bij te houden hoeveel mensen ingelogt zijn? Ik gebruik dus de MySQL database om inloggegevens te controleren.

kan die bv. m.b.v. sessions optellen? of een column genaamd "logged" maken, die op yes staat als de user is ingelogt, en op no staat alsie er niet is? En hoe zet ik 'm dan weer op no?

Danke

Verwijderd

Sessies heb ik niet veel kaas van gegeten, dus ik zou het gewoon zo doen dat je als een gebruiker inlogt de volgens MySQL query doorgeeft:

UPDATE members SET status='online' WHERE username='name';

Het aantal online users kun je dan opvragen met een Count query:

SELECT COUNT(*) AS naam_in_resultset FROM members WHERE status='online';


Ik hoop dat je hier wat aan hebt...

  • Terranca
  • Registratie: April 2000
  • Laatst online: 02-09 22:35
Zover was ik inderdaad nog wel gekomen, maar het probleem is dus om de status weer op offline te zetten.

Dus als de user de site verlaat

Verwijderd

Aantal mogelijkheden:

1) El cookie - geen mooie oplossing

Je laat de heletijd een koekje uitlezen waaruit blijkt dat een bepaalde gebruiker nog steeds pagina's op aan het vragen is, en je werkt verder met een time-out om de status off-line te zetten.


2) El javascript - onbetrouwbaar

Als een gebruiker de pagina sluit verander je via een onUnload event de SRC van een plaatje in dat van zo'n PHP image script. In dit script laat je de betreffende gebruiker 'uitloggen'. Het maakt niks uit dat het plaatje niet wordt getoond, want het script wordt toch uitgevoerd.

De onbetrouwbaarheid zit hem erin dat de onUnload soms niet op tijd het die javascript opdracht (om de SRC van het plaatje te wijzigen) kan uitvoeren (klinkt vreemd, maar ik heb het aan den lijve ondervonden). Daarom heb je hier ook nog steeds een time-out nodig.


3) El java - De beste oplossing

Een applet opent een socket naar een server proggie en de server kijkt om de zoveel tijd ff of de applet (en daarmee de betreffende pagina) nog beschikbaar is.

Dit is een projectje waar ik nu zelf mee bezig ben. Je kun het bekijken op mijn pagina (VisTrack). Het pakket is nog niet beschikbaar voor download, maar ik denk dat ik het zodra het klaar is gratis ga hosten, zoals soort NedStat.


Als je hier interesse in hebt kun je me gerust mailen, hoewel het nog 1 of 2 weekjes gaat duren voordat het helemaal werkt.

Verwijderd

Java applet??
Wat vreselijk omslachtig..

heb je bij PHP geen sessies en session_onstart en session_onend events oid dan?

Verwijderd

Nee....php wordt server side uitgevoerd dus php heeft geen idee wanneer iemand de pagina verlaat. Java wordt aan de client side uitgevoerd en kan dat dus detecteren.

sessions maken geburik van timeouts en garbage collection, waarmee bepaalde sessies 'opgeruimd' worden als die ene bepaalde tijd niet gebruikt zijn.
Tis voor dit doeleinde niet echt nauwkeurig, maar...eehh...laten we zeggen, hoe meer mensen er op je site komen, hoe nauwkeuriger het wordt.

Verwijderd

Het probleem is dat je met HTTP geen persistent connection krijgt, de verbinding met de server wordt dus verbroken zodra de opgevraagde file binnengehaald is. Zo is het dus niet mogelijk om te kijken hoeveel mensen met jouw pagina bezig zijn.

Ik heb hier een paar weekjes terug met een medetweaker aan gezeten en we zijn tot de conclusie gekomen dat die garbage collection eigenlijk maar waardeloos is. Een gebruiker kan bijvoorbeeld heel aandachtig je pagina aan het bestuderen zijn, of ff wat anders aan het doen zijn, terwijl je pagina dus nog steeds aktief is. Als je uitgaat van een garbage collection (wat ik dus time-out noem) zit je vast aan een maximale tijdsduur tussen HTTP requests. Als deze overschreden wordt neemt het script aan dat de gebruiker offline is (of iig je pagina niet meer is aan het bekijken). Het is erg moeilijk deze time-out in te schatten en hij verschilt eigenlijk per pagina (al naar gelang hoeveel info wordt geboden).


Conclusie & advies gevraagd

Dus een applet/server systeem is volgens mij nog altijd het beste en het werkt nagenoeg perfect. Het enigste probleem wat ik nu heb is ook een soort van timeout probleem. Eerst liet ik als een applet 'inlogde' de server alle sockets checken. Dit is de beste manier want zo krijgt de nieuwe bezoeker actuele gegevens, maar als dan een nieuwe komt loopt de server achter, omdat hij eerste nog de logfile moet aanmaken. De verandering zie je dan pas bij de volgende refresh.

Als ik nou met een interval ga werken om te updaten (naast de update bij een nieuwe bezoeker) dan heb ik hier geen last van omdat de logfile automatisch up-to-date wordt gehouden. Het probleem is alleen dat dat wel gaat vreten aan de resources, omdat ik meerder sites kan bijhouden met 1 server.

Mijn vraag: zou er iemand mee zitten als je moet refreshen om de nieuwere gegevens te zien? Het irritante hieraan is dat als je een nieuw venster opent (Ctrl-n) dat je dan krijgt te zien dat er maar 1 bezoeker op je pagina zit. Dan sluit je die pagina en refresh je de oude pagina en dan zijn het er opeens 2. Bij de volgende resfresh is alles weer goed. Moet dit verholpen worden of niet?

Bij voorbaat dank :)

  • Terranca
  • Registratie: April 2000
  • Laatst online: 02-09 22:35
Och, als hij er 1tje naast zit vind ik het niet zo'n ramp.. wel... kan je niet een pagina maken met daarin het bericht dat de login gelukt is en de applet laten draaien, en dan laten redirected naar de hoofdpagina, zodat daar wel het juiste aantal gebruikers opstaat?

PS: Kan je die VisTrack ff mailen want ik willem hebbe :)

Verwijderd

Een nadeel van HTTP protocol is idd dat het een stateless of connectionless protocol is, en mensen zijn al vanaf de oertijd bezig daar iets voor te verzinnen. Uiteindelijk heeft alles denk ik zijn voor en nadelen.

Het nadeel van de PHP sessions is dat je niet echt dynamisch de time uit van de garbage collector kan instellen. Als je bv. een grote pagina hebt waar veel te lezen is dat je dan die time-out kan vergroten oid. Alhoewel ik denk dat als je de time-out op 10 minuten zet dat je dan wel redelijk safe zit.

Het nadeel van Java Applets is dat ik het er persoonlijk niet zo op heb...;)
Als iemand een 486 heeft (tja, het komt nog voor) dan duurt het een eeuwigheid voor Java opgestart is, maar verder is het qua betrouwbaarheid en nauwkeurigheid wel de beste oplossing denk ik.

Verwijderd

Wat wil je er eigenlijk mee? Als je het alleen gebruikt om een tellertje "er zijn x users op de site" te hebben lijkt me een applet echt veel te lomp.

Sessies houden wel resources vast op je server.. voor elke user wordt dan een stukkie geheugen geclaimd.. op een site met veeel users wil je dat waarschijnlijk niet.

(Sessies in IIS bijv. timen standaard uit na 20 minuten, dat kan je langer maken, maar dan claim je dus gemiddeld ook meer resources.)

Als je een zichzelf refreshend-iframepje of gewoon framepje maakt kan je de verbinding levend houden voor de webserver.. dan gaan de users pas weg als ze wegbrowsen oid. En je kan een lage timout nemen. En je hebt geen (evil ;)) applet

Verwijderd

Valt wel mee met resources hoor. Stel dat je alleen sessid, een expiry date, een auth variabele en evt een user id opslaat. Dat zal bij elkaar hoogsten 100 byte zijn. Als je dan 5000 users tegelijk op je pagina hebt wordt dat ongeveer 5000 x 100 byte = 500 kbyte.

En dat voor 5000 users TEGELIJK, maar geef nou toe, als je een site hebt waar gemiddeld 5000 bezoekers tegelijk op komen, dan hoop ik voor je dat je zowiezo wel wat ruimte op je server hebt.;)

Verwijderd

<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>Wat wil je er eigenlijk mee? Als je het alleen gebruikt om een tellertje "er zijn x users op de site" te hebben lijkt me een applet echt veel te lomp.[/quote]Ik ben dit natuurlijk niet aan het maken omdat ik wil weten hoeveel gebruikers er samen met mij op m'n pagina zijn. Het is wel leuk om dat te laten zien, maar het grote voordeel ligt er volgens mij in dat je kunt zien hoe lang gebruikers op je site blijven.

Kijk, als je NedStat counter zegt dat je bijvoorbeeld 2000 bezoekers hebt gead tot nu toe, dan is dat veel voor een kleine site en meen je je al snel wat. Maar met het programma waar ik aan bezig ben kun je dan dus zijn dat die gebruikers maar 2 seconden bleven. Dan weet je meteen dat je hoognodig verbeteringen aan moet brengen... :)

Verder vallen de gebruikte recourses nogal mee, één gebruiker neemt hooguit een paar kB geheugen in, dus dat is geen probleem. Het enigste wat eventueel een probleem zou kunnen vormen is als ik met dat interval ga werken voor meerdere sites, maar ik denk dat ik dat bij nader inzien maar stiekempjes laat (zou onze sysadmin ook niet echt op prijs stellen hier).


Terranca:

Dat VisTrack pakket zal nu binnen 1 of twee weekjes klaar zijn, maar ik denk dat ik het gewoon als service ga aanbieden, aangezien de meeste mensen geen toestemming hebben om op hun server een programma continue op de achtergrond te laten draaien. Als je daar ook interesse in hebt, dan laat ik het je wel zo snel mogelijk weten als alles funtioneert zoals het moet...


[edit]

De gebruikte applet is tot nu toe overigens zo simpel dat een 386 hem nog met gemak zou kunnen trekken ;) Er zit geen GUI toestand in en hij is iets van 0,75 kB groot. Ik ben het nu wel zo aan het maken dat je alles zo'n beetje zelf kunt aanpassen naar je eigen wensen en wat er nog aan de Applets gaat veranderen weet ik nog niet, maar we zien wel.

Verwijderd

Ik zeg ook niet dat het een slecht idee is, alleen het is EEN oplossing voor dit soort toepassingen. Ik zou het persoonlijk niet gebruiken omdat ik er een hekel aan heb om dingen client side uit te voeren.

Ik zeg altijd maar zo: Java en JS is handig, maar ik gebruik het alleen als aanvulling, niet als iets waar je op moet vertrouwen. Daar is het veel te afhankelijk voor.

Verwijderd

En ik zeg maar altijd zo: Java roeleert :)

Ik heb op school namelijk als eerste taal Java gekregen en mij daar eens veel te veel in verdiept. Met java kan je in feite alles doen wat je wil, zolang je SandBox het toelaat.

Hoezo is Java te afhankelijk (bij JS is dit volledig waar overigens)?

Verwijderd

Als je Java op webpagina's gebruikt ben je afhankelijk van de client. Je tooltje gaat bv. al niet op als ik met lynx op je pagina kom.

  • tomato
  • Registratie: November 1999
  • Niet online
Ik ben het eigenlijk wel met The Daan eens. Als je een beetje controle wilt over wat er gebeurt, doe dan zoveel mogelijk server-side. Daarnaast vinden veel bezoekers het ook niet echt fijn als er eerst 10 minuten een java applet gedownload moet worden of als het stikt van de javascript error omdat men toevallig vergeten is met Netscape te testen. Maar dit is wel een beetje off-topic geloof ik.
Als je echt betrouwbaar weten wie er op een bepaald moment je site aan het bekijken is, dan wordt dat inderdaad erg moeilijk (tot onmogelijk) om dat alleen server-side te doen.

Coole discussie trouwens :)

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 14-09 22:46

Apache

amateur software devver

http://www.phpwelt.de

hier staat een scriptje dat het toch tamelijk goed doet op hun site :)

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


Verwijderd

Bedoel je die PowerCount? Dat is idd wel zo ongeveer het idee waar ik aan werk momenteel, alleen dan in het Nerderlands :D Verder over server-side oplossingen: zie hieboven...

[edit]<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>echt fijn als er eerst 10 minuten een java applet gedownload moet worden of als het stikt van de javascript error omdat men toevallig vergeten is met Netscape te testen[/quote]Dat ligt helemaal aan de maker van de pagina/applets/scripts. Zoals ik al zei is de applet maar 0,75 kB groot en vraagt nauwelijks resources. Javascript gebruik ik alleen als ik weet dat de commando's bij Netscape en IE hetzelfde zijn. Dit is ook wel een beetje off-topic, maar voor 1 keertje mag het wel denk ik ;)


The Daan:

Ik heb zelf geen ervaring met Lynx, maar die wordt toch niet echt bepaald veel meer gebruikt toch? Is er geen manier om dit probleem op te lossen, want ik wil het toh wel voor nagenoeg alle browsers laten werken?

Verwijderd

<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>Op 16 september 2000 13:39 schreef Apache het volgende:
http://www.phpwelt.de

hier staat een scriptje dat het toch tamelijk goed doet op hun site :)[/quote]Dat ding delete om de X minuten een user uit de db, ook niet echt betrouwbaar dus

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 14-09 22:46

Apache

amateur software devver

hoe betrouwbaar moet zo'n scriptje eigenlijk zijn???

Ik bedoel maar dat het eigenlijk niet echt een nut heeft maar dat het eerder kewl is dat je visitor's het zinnetje zien staan<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>Op dit moment zijn er nog 15 andere mensen deze site aan het bekijken.

ofzo :)[/quote]

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


  • tomato
  • Registratie: November 1999
  • Niet online
<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>Ik heb zelf geen ervaring met Lynx, maar die wordt toch niet echt bepaald veel meer gebruikt toch? Is er geen manier om dit probleem op te lossen, want ik wil het toh wel voor nagenoeg alle browsers laten werken?[/quote]Dat is dus een probleem van client-side oplossingen. Als Lynx geen java kan uitvoeren, dan valt er dus niet veel aan te doen (met java iig).

Verwijderd

idd, dat bedoel ik met client afhankelijk, net zo goed als JS...

Verder, maar dat is geheel mijn persoonlijke mening, ben ik een pagina al beu op het moment dat ik onderaan 'Loading Java..' zie staan. Nogmaals, dat is mijn mening.

Het blijft echter een feit dat je afhankelijk bent van de client side, en dat vind ik zelf het grote nadeel.
Ik heb een forum gemaakt met wat JS erin, maar mensen gingen klagen (en dat waren er best wat) dat ze onder lynx geen berichtjes konden posten.
Enne, btw, werkt die applet van jou ook onder MacOS, Linux, BeOS???

p.s.: ik probeer je niet af te kraken, ik vind dit gewoon een erg interessante discussie over een eeuwenoud vraagstuk...nl. client-side vs. server-side

Verwijderd

No offence whatsoever taken ;)

Ik vind het ook nog wel eens leuk om wat te disussieren hier, dus ik ga ff vrolijk verder met Uw goedvinden :)

Die applet kan door elke interpreter worden uitgevoerd, en daardoor door virually any platform that supports a JVM. Dat is dus de grote kracht van de hele PURE Java gebeuren. In de applet worden alleen basis Java objecten gebruik die door de officiële libraries van Sun worden ondersteund, dus niet een of ander MSSI (MS Stolen Idea). Hiermee behoud ik dus mijn platform-onafhankelijkheid, maar als niet alle browsers Applets kunnen draaien houdt het natuurlijk op.

Het programma houdt overigens via PHP/MySQL onder andere ook nog bij hoeveel mensen er welke browser gebruiken. Aangezien de tool voornamelijk bedoeld is om uitgebreide statistieken op te bouwen over een bepaalde site kun je uit die gegevens afleiden of de gemiddelde bezoek-tijd representatief genoeg is om mee ver te gaan.

Verwijderd

Tja, als je idd de tijd wilt weten dat iemand PRECIES op de pagina is, heb je waarschijnlijk geen keus dan Java gebruiken.
Wat betreft de java virtual Machine heb je natuurlijk gelijk. dat is ook de kracht van Java. Maar het is met Java hetzelfde als met cookies, je kan ook dat uitzetten in je browser. Het blijft een manier die vertrouwt op de mogelijkheden van de client. En die zijn niet altijd zoals ze moeten zijn..

  • Tom
  • Registratie: Juni 1999
  • Niet online

Tom

OK ik deze thread niet helemaal gelezen en ben alles behalve een PHP-koning :)

Maar waarom maak je niet een veld 'lastseen' in je usertable. Dat veld vul je bij elke pageview met een timestamp.

Dan:
$bla=time()-3600
mysql_query("SELECT names FROM users WHERE lastseen>$bla");

en klaar ben je. Je moet alleen zorgen dat die user inlogt.

Zoiets kun je voor elkaar krijgen door een cookie met een vaag/lang/random getal op die pc te pleuren bij registreren, en datzelfde getal in de userdb in een veld te gooien. Zo'n getal is nooit te raden en dus kan niemand onder een andere naam inloggen, want dat getal zit aan zijn username gekoppeld.

Of zie ik nu iets grandioos over het hoofd?

Verwijderd

Ja, het simpele feit dat je niet weet of merkt wanneer iemand de pagina verlaat als je enkel server side de boel logt.

En daar gaat het nu juist eigenlijk om. Dat heb je nodig om het echt nauwkeurig te doen.

  • Tom
  • Registratie: Juni 1999
  • Niet online

Tom

Als jij de mensen uit de member-table haalt die de laatste 10 minuten nog hun 'lastseen' timestamp hebben geupdate, dan mag je ervan uitgaan dat die er nog opzitten. En als ze weg gaan wordt die timestamp niet geupdate en komt die gast dus ook niet naar voren bij die query.

Verwijderd

Dan zit je nog altijd met die 10 minuten time-out. Die onnauwkeurigheid kan voor een kleine tot middelgrote webstie een wereld van verschil betekenen.

  • Tom
  • Registratie: Juni 1999
  • Niet online

Tom

Dan zorg je voor een hidden frame die elke 20 seconden refreshed... ben je van het probleem af. Of je bouwt een Javascriptje dat een plaatje met daarachter een PHP scriptje elke 20 seconden vervangt....

  • WAcKiN
  • Registratie: November 1999
  • Laatst online: 28-08-2023
nope, idd een last seen met een knopje LOG OUT aangezien mensen in kunnen loggen is het logisch dat je ook uit kan loggen (en dan WEET je dat mensen niet meer ingelogd zijn) :)

Verwijderd

Tja, als iedereen netjes uit zou loggen is het probleem ook opgelost, maar ja...probeer je visitors maar eens zover te krijgen dat ze allemaal altijd uitloggen...;)

  • Tom
  • Registratie: Juni 1999
  • Niet online

Tom

<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>Op 17 september 2000 04:07 schreef Tom het volgende:
Dan zorg je voor een hidden frame die elke 20 seconden refreshed... ben je van het probleem af. Of je bouwt een Javascriptje dat een plaatje met daarachter een PHP scriptje elke 20 seconden vervangt....[/quote]Hier -> zo moeilijk is dat toch niet, heb je niet eens per se een logout knopje nodig. Verder laat je dat getal bij elke pageview ff opnieuw in de db gooien (voor de mensen die Javascript uit hebben staan als die er al zijn). En als het wel werkt, met dat plaatje vervangen, dan heb je ook geen last dat die listing niet klopt, vooral niet als je het plaatje elke 30 seconden ofzo laat vervangen.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>Op 17 september 2000 12:30 schreef The Daan het volgende:
Tja, als iedereen netjes uit zou loggen is het probleem ook opgelost, maar ja...probeer je visitors maar eens zover te krijgen dat ze allemaal altijd uitloggen...;)[/quote]onunload is toch een functie die je kan draaien als iemand de browser sluit? misschien kan je daar wat mee

Programmer - an organism that turns coffee into software.


  • tomato
  • Registratie: November 1999
  • Niet online
Ik hoorde pas iemand zeggen dat de unload event niet altijd helemaal werkt. Zelf nooit iets mee gedaan, maar ik kan me voorstellen dat er niks gebeurt als bijv de browser crasht...

Verwijderd

Ja, die iemand was ik :) onUnload werkt idd soms niet als je ook gewoon de browser afsluit, dat was ook het probleem met de eerste versie wat ik maakte.

Ik denk dat als je het puur server-side wilt oplossen dat de oplossing van Tom het beste is. Misschien dat ik het ook maar zo ga oplossen, want met dat client-server systeem zit je ook met een maximum in bezoekersaantallen. Niet dat je al die bezoekers op 1 site zal krijgen, maar de server is ontworpen om meerdere sites tegelijk in de gaten te kunnen houden en dan kan het nog wel eens oplopen.

Alleen weet ik niet of deze methode het dan wel doet bij die textbrowsers. Weet iemand misschien hoe dat dan daarbij zit??

  • Cliff
  • Registratie: Juni 2000
  • Laatst online: 16-09-2025
Sorry om dit oude topic weer op te halen... Maar dit is wel zo ongeveer wat ik zoek.

Weet iemand of de applet VisTrack waar aan het begin van deze thread over gesproken werd ooit afgemaakt is?

  • Cliff
  • Registratie: Juni 2000
  • Laatst online: 16-09-2025
Ik bump dit nog even. Ik heb Websjwans een mailtje gestuurd maar geen reactie gehad...

Weet iemand of hij nog actief is op Tweakers of bereikbaar is via een ander mailadres?

Cheers,

Cliff.

  • bekkel
  • Registratie: Augustus 2000
  • Laatst online: 17-09-2025

bekkel

BoEsm Productions

ben ook wel benieuwd..

.........www.raketje.com....................soon.....

Pagina: 1