[php] nog een klein probleempje bij bezoekrs-teller

Pagina: 1
Acties:

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
M'n bezoekers teller heeft nog 1 klein probleempje:
Om te voorkomen dat ik een extra hit krijg als iemand refreshed (hoef mezelf echt niet voor de gek te houden), sla ik de laatst bezochte pagina in een sessie op
Nou merkte ik dat dat niet ging werken als iemand de eerste pagina refreshte - wat natuurlijk logisch, dus heb ik voor de eerste pagina een redirect gemaakt, zodat die waarde gelijk in de sessie wordt opgeslagen. (beetje kromme zin, maar snap wat ik bedoel?)

Dit doe ik zo:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 // we're gonna check if this is the first time in this session the user accesses a page:
if (!$_SESSION["u_counter"])
{
     // hiermee sla ik in een file iedere nieuwe bezoeker op
     // en genereer daarmee tegelijkertijd een bezoekersid, die ik in m'n andere logfile gebruik
    $u_counter = implode("", file($root."/inc/visits.dat")) + 1;
    $fp = fopen($root."/inc/visits.dat","w");
    fputs($fp, trim($u_counter));
    fclose($fp);
    session_register("u_counter");
    header("Location:$REQUEST_URI");

}
  // we're gonna log the specifics of this user
if ($REQUEST_URI != $_SESSION["last_page"])
{
    $last_page = $REQUEST_URI;
    session_register("last_page");
    // en dan wat code om informatie over die bezoekers te registreren
}

Nou merk ik alleen dat als iemand de eerste pagina opvraagt en gelijk tijdens het laden van die pagina als een gek op refresh gaat klikken, dit niet werkt.
Tenminste....dit is wat ik denk dat er gebeurt. M'n hele logfile ziet er goed uit, maar vanochtend had ik iemand die met tussenpozes van ca 2 seconde telkens als een nieuwe bezoeker werd gelogd op de eerste pagina. Dus ik denk dat ie gewoon heel zenuwachtig op refresh heeft zitten klikken omdat het te lang duurde naar zijn/haar mening.

Maar aan de andere kant snap ik niet goed hoe dit dan kan gebeuren, want de server is de code aan het parsen en gelijk na het wegschrijven van de bezoeker als 'nieuwe bezoeker' vind die redirect plaats, nog voor dat ie 'm in die andere logfile weg schrijft (die code staat tussen de tweede if{} en slaat id, tijd, pagina, etc op) en zou ie niet nog een keer geregistreerd moeten worden.

Anyways...wie kan me vertellen wat er fout gaat en wat ik er aan kan doen?
(ik zat zelf al te denken aan de laatste regel in de logfile bekijken en zien of die (behalve de tijd) identiek is aan de wat ie moet toevoegen - maar dat moet makkelijker kunnen volgens mij)(maargoed, ik had ook verwacht dat dit al zou moeten werken....)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Je zou de pagina waarop mensen binnenkomen (de entrypage, daar waar geen HTTP_REFERER bestaat) als entry-page op kunnen slaan.

Als men refresht, en de request is gelijk aan de entrypage, en er is geen last_page bekend, dan betekent dat dus dat de bezoeker zo'n zenuwpees is.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

vraagje: waarom zou het niet werken als je zonder redirect werkt en op de 1e pagina checkt of er een sessie is -> ja: niks, nee: bewerk visits.dat en maak sessie.
?

Als iemand reload bestaat die sessie toch of overzie ik iets?

*insert signature here


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

marty schreef op 21 augustus 2002 @ 13:58:
Nou merkte ik dat dat niet ging werken als iemand de eerste pagina refreshte - wat natuurlijk logisch

Das imho niet logisch:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
session_start();
if(!isset($_SESSION['PHP_SELF']))
{
    $_SESSION['PHP_SELF'] = $_SERVER['PHP_SELF'];
    echo "Hey een nieuwe bezoeker!";
}
else
{
    echo "Hey, je drukte op refresh";
}
?>

De eerste keer dat ik daar kom krijg ik "Hey een nieuwe bezoeker!", als ik dan op f5 druk krijg ik "Hey, je drukte op refresh".

Verder zul je dat dus voor je eigen eisen aan moeten passen.

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

huh?
PHP:
1
2
3
if(!isset($_SESSION['PHP_SELF'])) 
{ 
    $_SESSION['PHP_SELF'] = $_SERVER['PHP_SELF'];

als de sesvar PHP_SELF niet geset is, dan set PHP_SELF sesvar naar zichzelf die niet bestaat?

- waarom verne*kt parse nou weer die '-tjes?

[ Voor 0% gewijzigd door Tjark op 21-08-2002 14:21 . Reden: Leesbril nodig.... ]

*insert signature here


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
drm: die HTTP_REFERER heeft wel een waarde als mensen via een zoekmachine komen.
Daarbij ik heb ook een kickme.to adres en die wordt ook als referer gezien.

tjark: Als je op de eerste pagina komt en je refresht, wordt de aanvraag op de server opnieuw gedaan en is die sessie waarde gewoon nog leeg. Na het bezoeken van de eerste pagina moet de bezoeker eerst weer langs de server wil die data in de sessie worden opgeslagen.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

TjarkVerhoeven schreef op 21 augustus 2002 @ 14:12:
als niet geset dan set PHP_SELF sesvar naar zichzelf die niet bestaat?

Jij bent de beste in code lezen of niet? >:)
marty schreef op 21 augustus 2002 @ 14:14:
tjark: Als je op de eerste pagina komt en je refresht, wordt de aanvraag op de server opnieuw gedaan en is die sessie waarde gewoon nog leeg. Na het bezoeken van de eerste pagina moet de bezoeker eerst weer langs de server wil die data in de sessie worden opgeslagen.
Bij mij gaat dat goed, ik snap niet waarom dat bij jou fout moet gaan.

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

ACM schreef op 21 augustus 2002 @ 14:16:
[...]
Jij bent de beste in code lezen of niet? >:)
[...]
|:( |:( |:( |:(
Mental note: SESSION != SERVER |:( |:( |:( |:(

*insert signature here


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
acm: je heb m'n code hierboven gezien....dat moet dan toch goed zijn?
hier is een stukje uit m'n log:
This user was no 105 to visit this page
ip: 145.18.200.169 (re-200-169.ic-public.uva.nl)
browser: Internet Explorer 6.0
date: 2002/08/21 - 11:20:30
[...]

This user was no 106 to visit this page
ip: 145.18.200.169 (re-200-169.ic-public.uva.nl)
browser: Internet Explorer 6.0
date: 2002/08/21 - 11:20:32
[...]

This user was no 107 to visit this page
ip: 145.18.200.169 (re-200-169.ic-public.uva.nl)
browser: Internet Explorer 6.0
date: 2002/08/21 - 11:20:34
[...]
zo is ie in totaal iets van 10x gelogd...

wat moet ik dan aan m'n code veranderen?

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

Misschien is het dit ( http://www.php.net/manual...session-is-registered.php ) :
Caution
If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered() and session_unregister().
jij doet een

(!$_SESSION["u_counter"])

en later een:

session_register("u_counter");

dus dan zou
(!$_SESSION["u_counter"]) -> (!session_is_registered("u_counter"))
't probleem oplossen (?)

*insert signature here


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
oops
Pagina: 1