uren online tellen
Ik ben bezig met een profielen website (ja ja ik weet het er zijn der al zo veeeeeeel)..
Maar nu wil ik een functie in bouwen om het aantal minuten/uren/dagen dat een gebruiker online is te tellen.
Bijvoorbeeld login om: 17.00 loguit/session verbroken om 17.30.
Uren online is 0.5.
Hoe kan ik dit berekening/opslaan?
Vriendelijke groet,
Robin
Gebruik je SQL? Zo ja, hoe zien je tabellen eruit?
Gebruik je geen SQL, hoe sla je de gegevens dan wel op?
Wil je alleen om dat te tellen 3 miljard requests sturen voor helemaal niets?
online
----------
member_id (gebruikers id)
datum (datum en tijd + 600 sec)
datum_start (datum en tijd)
page (huidige pagina)
Tenzij je je leden per seconde online wil betalen is het toch helemaal niet nodig dat je het zo vaak controleert?
Gewoon een scriptje includen op elke pagina dat kijkt wanneer ze ingelogged zijn en dan tijdverschil uitrekenen?
En gewoon de laatst geupdate tijd opslaan..
@robin
Maar je slaat alleen een startdatum op, en de tijd van 10 minuten daarna. Hoe wil jij dan bepalen uit die gegevens hoe lang iemand online was?
Ik was nog iets vergeten, in de tabel leden wordt ook opgeslagen op welk tijdstip een/de gebruiker het laatst heeft ingelogd.
Dat vroeg ik niet, maar je hebt als het goed is een begin en een eindtijd! Anders valt er niets te berekenen!
Het makkelijkst is het elke request bij te tellen. Het scenario om het te doen bij starten/beeindigen sessie is lastiger, omdat je dan periodiek moet checken wie er ingelogd is en wanneer iemand uitgelogd is. Vaak loggen mensen ook niet netjes uit, wat een vertekend beeld zal geven voor online uren. Soms is het fijn sessies iets langer te kunnen laten doorlopen, vandaar deze oplossing.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// of hoe je ook aan een user id komt
$user_id = $_SESSION['user_id'];
// als iemand meer dan 5 minuten geen refesh heeft gedaan, opnieuw tellen.
$threshold = 5;
$difference = time() - $_SESSION['lastRequest'];
if ($difference < 5*60) {
// hoe je users tabel er ook uit mag zien.
mysql_query("UPDATE users SET timeonline = DATE_ADD(timeonline, INTERVAL " . $difference . " SECOND)");
}
$_SESSION['lastRequest'] = time();
?>
// of hoe je ook aan een user id komt
$user_id = $_SESSION['user_id'];
// als iemand meer dan 5 minuten geen refesh heeft gedaan, opnieuw tellen.
$threshold = 5;
$difference = time() - $_SESSION['lastRequest'];
if ($difference < 5*60) {
// hoe je users tabel er ook uit mag zien.
mysql_query("UPDATE users SET timeonline = DATE_ADD(timeonline, INTERVAL " . $difference . " SECOND)");
}
$_SESSION['lastRequest'] = time();
?>
Ik laat ze bij 5 minuten inactiviteit als uitgelogd rekenen. De eindtijd wordt bijgewerkt als iemand een actie uitvoerd op de website, dus mocht iemand dan 5 minuten niets hebben gedaan en een kwartier later terug komen (jah, hij kent diegene dan nog, maar geeft wel aan dat diegene 10 minuten is weggeweest. Dat verschil van 5 minuten neem ik dan wel voor lief)
Kan je misschien een aanzetje geven om het te doen zoals jij het doet?
Btw, wat is het grote voordeel als je weet ongeveer hoe lang de gebruiker online is geweest?
Je hebt een usertabel, via waar je inlogt.
Je hebt een tabel met login-gegevens (userid, tijd van inloggen, en tijd van laatst actief)
Bij de tijd van inloggen sla je de tijd op dat iemand weer inlogt. Bij de tijd van laatst actief, kijk je of er al 5 minuten of meer zijn verstreken, zo ja -> Nieuw record, zo nee update de tijd naar de nieuwe tijd. (dit controleer je elke keer als de ingelogde bezoeker een pagina op je site bezoekt)
Moet je een nieuw record aanmaken, dan krijg je weer hetzelfde verhaal. Zo heb je altijd de gegevens van wanneer veel users online zijn, en kan je ook bepalen hoeveel iemand online is geweest.
Maar hier had ik dus geen topic voor hoeven openen als ik geen kennis had van php, je hebt toch google..
Er zijn altijd meerdere wegen die naar Rome leiden. Ik vind het vrij logisch dat iemand zo'n vraag stelt: hoe pak je zoiets aan.
Juist op zo'n vraag krijg je verschillende antwoorden. Dan kan je zelf altijd nog kiezen. Bovendien zijn er wel scriptjes voor, maar op zo'n manier leer je er veel meer van.
Copypasten leer je idd niets van, maar wat ik altijd deed, ik bestudeerde het script en paste het aan.
Tommy schreef op 13.01.2008 23:03:
Maar hier had ik dus geen topic voor hoeven openen als ik geen kennis had van php, je hebt toch google..
Ik snap je opmerking niet helemaal Tommy, waar wil je heen? En wat is de toegevoegde waarde van je vorige posts. Het valt me op dat je veel van deze posts hebt waarin je ingaat op de discussie zelf, en niet op het onderwerp. Want als ik zoek op Google naar een manier om de user online time uit te rekenen, krijg ik meer marketing-facts dan een uitgebreid antwoord zoals hier, waar verschillende opties voorbij komen.
Maar om zelf even in te gaan op het onderwerp..
Ik zou zelf de tijd van de aanvraag opslaan in de sessie. Wanneer je dan een pagina aanroept, vergelijk je de tijd van de vorige aanvraag (die nog in de sessie staat) met de huidige tijd. Is deze delta-tijd niet groter dan bijvoorbeeld 5 minuten, dan tel je de delta-tijd op bij het geheel in de database. Vervolgens vernieuw je de tijd in de sessie naar de actuele tijd zodat je straks weer een mooie delta-tijd kan uitrekenen. Volgens mij is dit ongeveer met wat Robert voor ogen had.
edit: ik zou de online tijd uiteindelijk gewoon in een int-veld opslaan, waarin het aantal seconden staat. Dat rekent makkelijk, en heeft geen verband met een start en een eind-tijd (want die heb je niet, je hebt alleen een totaal, een som van start- en eindtijden) wat datetime wel heeft.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
En als je er php bij zet? Daar al aan gedacht?
Ik heb bijvoorbeeld een tabel waarin ik mijn users online bijhoud. Wanneer een gebruiker een lid is -> user != 0. Je kan hier elke keer checken of het verschil minimaal x aantal minuten is en dan updaten in je database -> dus misschien dan handig om een veld aan te maken in de tabel users `tot_time_online` waar je de nieuwe waarde in update.
Ik snap je ook niet helemaal tommy. Je zegt dat jij hier geen topic voor had moeten openen. Top, helemaal geweldig, de TS wel en daar is phphulp voor. Ik snap je ding niet helemaal. Zijn je posts zo belangrijk?