[php] Visit Time & Total time spend
hoe kan ik van elke bezoeker van mijn site de verblijf -tijd met PHP meten?
Ik dacht aan cookies... maar zonder JavaScript! Dus geen gebruik van onUnLoad, vanwege de mense die geen JavaScript aan hebben staan.
Heb je meer details nodig, zeg 't dan ff...
Alvast tnx, en Greetz van Mike
Gewoon bij elke pageload een nieuw record met (id, ip & datetime) en het verschil tussen de records berekenen..
Maar... doordat ik het script alleen voor 1 pagina nodig heb is dat niet mogelijk. En zelfs als dat zou kunnen, wat doe je dan als de user de pagina exit?
Dus moet ik JS gaan gebruiken?
Aangezien je nooit de exacte tijd kan meten; zelfs neit met javascript (user zit op ander tabblad, heeft browser afgesloten) gebruik ik een timeout tijd van 5 minuten.
Dus een accurate tijd zal je nooit krijgen. maar als je het gewoon leuk vindt om op de site te hebben, dan kan ik wel wat code geven.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$activetime = time();
mysql_query("UPDATE leden SET lastaction = '".$activetime."' WHERE id= '".$get_userdata['id']."' "); // Hoe roep jij je huidige userID op?
// verschil berekenen en als deze kleiner is dan 300 (5 min.) dan updaten... anders niet!
$verschil = time() - $get_userdata['lastaction'];
if ($verschil<300) {
mysql_query("UPDATE leden SET spenttime = spenttime + '".$verschil."' WHERE id= '".$get_userdata['id']."' "); // tja, hoe roep jj je userID hier op?
}
?>
$activetime = time();
mysql_query("UPDATE leden SET lastaction = '".$activetime."' WHERE id= '".$get_userdata['id']."' "); // Hoe roep jij je huidige userID op?
// verschil berekenen en als deze kleiner is dan 300 (5 min.) dan updaten... anders niet!
$verschil = time() - $get_userdata['lastaction'];
if ($verschil<300) {
mysql_query("UPDATE leden SET spenttime = spenttime + '".$verschil."' WHERE id= '".$get_userdata['id']."' "); // tja, hoe roep jj je userID hier op?
}
?>
Zoiets wordt het dus. Hence het zelfs beter kan, maar goed. Ik koos 2 jaar terug voor time(), en het aantal actieve seconden online (niet accuraat!) opslaan in de database.
Met een leuk scriptje kan je hier zelfs een string uittoveren als:
'1 dag, 2 uur, 13 minuten en 37 seconden online'
Gewijzigd op 01/01/1970 01:00:00 door - Ariën -
You put a smile on ma face :)
Ik zal 't ff uit elkaar plukke en in me script zetten.
Thnx
Edit: Dit stukje code is nice ->
Niet veel, maar is the main thing :P
Gewijzigd op 01/01/1970 01:00:00 door Mike
Veel success ermee, als je vragen hebt hoor ik het wel in dit topique.
Gewijzigd op 01/01/1970 01:00:00 door - Ariën -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
// Dit is een voorbeeld Script
// Created by Mike for PHPHulp.nl Forum
$timestamp = time();
$stats_date = date ("d/m/Y"); // Stats Date
$visit_alpha = $_COOKIE['lastVisit'];
$visit_beta = $_COOKIE['visitTime'];
$stats_visittime = ($timestamp - $visit_beta) - (60 * 60);
$stats_visittime = date("H:i:s", $stats_visittime);
if(!isset($_COOKIE['lastVisit']) && !isset($_COOKIE['visitTime'])) {
$cookTime = 60 * 60 * 10 + time();
setcookie('lastVisit', $stats_date, $cookTime);
setcookie('visitTime', $timestamp, $cookTime);
}
echo <<<HTML
<p><strong>Visit Date:</strong> $visit_alpha </p><p><strong>Visit Duration:</strong> $stats_visittime </p>
HTML;
exit();
?>
// Dit is een voorbeeld Script
// Created by Mike for PHPHulp.nl Forum
$timestamp = time();
$stats_date = date ("d/m/Y"); // Stats Date
$visit_alpha = $_COOKIE['lastVisit'];
$visit_beta = $_COOKIE['visitTime'];
$stats_visittime = ($timestamp - $visit_beta) - (60 * 60);
$stats_visittime = date("H:i:s", $stats_visittime);
if(!isset($_COOKIE['lastVisit']) && !isset($_COOKIE['visitTime'])) {
$cookTime = 60 * 60 * 10 + time();
setcookie('lastVisit', $stats_date, $cookTime);
setcookie('visitTime', $timestamp, $cookTime);
}
echo <<<HTML
<p><strong>Visit Date:</strong> $visit_alpha </p><p><strong>Visit Duration:</strong> $stats_visittime </p>
HTML;
exit();
?>
Check a.u.b. ff of er iets geoptimaliseerd kan worden... Ik ga het dan verder uitbrijden en aanpassen.
Gewijzigd op 01/01/1970 01:00:00 door Mike
En wat als je geen cookies accepteert? :P
Code (php)
1
2
3
2
3
<?php
echo '<p><strong>Visit Date:</strong> '.$visit_alpha.' </p><p><strong>Visit Duration:</strong>'. $stats_visittime.' </p>';
?>
echo '<p><strong>Visit Date:</strong> '.$visit_alpha.' </p><p><strong>Visit Duration:</strong>'. $stats_visittime.' </p>';
?>
Maar in dit voorbeeld script zijn de cookies alleen een temporaire vervanging van de mySQL queries.
Dus wil ik alleen de workflow van het script indiceren :P
Btw. heb je nog iets negatiefs kunnen vinden?
@ Afra: Is de <<<HTML versie ouderwets? of wat is het verschil tussen jou en mijn mannier? Please explain :D
Gewijzigd op 01/01/1970 01:00:00 door Mike
Komt niet echt ten goede aan de highlighting, en het is gewoon ranzig...