Hallo,

Ik wil binnen mijn website een PHP-functie aanroepen, maar alleen bij de eerste pageload. Dus niet als pagina ververst wordt of opnieuw geladen wordt. De functie is voor een bezoekersteller, vandaar.

Vond dit antwoord:
https://stackoverflow.com/a/25070971

Ben hier mee aan de slag gegaan en dit in mijn PHP paginatemplate gezet:


<?php
echo '<script type="text/javascript">';
echo 'if (!sessionStorage.alreadyClicked) { '.mijn-functie().' sessionStorage.alreadyClicked = 1; }';
echo '</script>';
?>


Maar de functie blijft elke keer uitgevoerd worden, als ik pagina ververs.

Als ik een alert ipv mijn-functie() toe voeg werkt het wél (alert wordt niet getoond als ik pagina ververs).

Doe ik iets verkeerd?

Guido
@Ozzie dat neemt niet weg dat je de vragensteller aan de tand mag voelen om een gevoel te krijgen of de persoon in kwestie snapt waar 'ie mee bezig is, over bepaalde zaken heeft nagedacht en ook een idee heeft waar 'ie nou eigenlijk naartoe aan het borduren is. Geen van deze zaken worden eigenlijk duidelijk. Waarom zou je (PHP-)sessies gebruiken voor het tellen van (unieke) bezoekers / pagina-bezoeken? En hoe zou dat er dan uit moeten zien? Joost mag het weten.

Je zou op zijn minst een soort van plan moeten hebben wat je gaat doen of hoopt te bereiken; hoe je dat implementeert is een tweede. Wat is dus precies het plan?

Natuurlijk kun je je niet overal tegen indekken, dat suggereer ik volgens mij ook nergens. Het enige wat ik probeer te doen is een bewustzijn creëren van dingen waar je mogelijk mee te maken kunt krijgen. Of en wat je hier eventueel mee kunt of wilt doen staat hier verder helemaal los van. Je zou het wel in je besluitvorming mee moeten nemen bij de vormgeving van je oplossing.
@Ozzie PHP

Goed punt, WordPress werkt met pagina IDs dus ik zal er een prefix aan toevoegen zodat de naam van de sessie in het voorbeeld "page-600" wordt.

Het werkt nu op zich goed, als ik meerdere pagina's aanklik wordt er keurig een nieuwe sessienaam aangemaakt:

array(4) { ["page-616"]=> bool(true) ["page-597"]=> bool(true) ["page-592"]=> bool(true) ["page-603"]=> bool(true) }


Volgende stap is de cookie niet direct sluiten als scherm gesloten wordt.

Guido
Waarom geen subarray "pages"? Moet je op een zeker moment een page-xyz index weer demonteren om hier xyz uit te halen? Bij het aan elkaar plakken van informatie wordt het lastiger om deze informatie rechtstreeks te gebruiken.
@Thomas

>> @Ozzie dat neemt niet weg dat je de vragensteller aan de tand mag voelen ...

Ja, van mij mag je hoor. Alleen ging het in dit specifieke geval om vrij algemene "wat als" situaties.

@Guido

Thomas heeft wel een punt wat betreft het gebruik van een array. Nu zijn het allemaal losse 'entries', terwijl dit informatie is die bij elkaar hoort.

Als je de array dan $visited_pages noemt dan is gelijk duidelijk wat er in zit. Je hoeft dan ook alleen maar de id op te slaan en niet een boolean.
Hallo,

@Thomas
Ik begrijp je kritische houding. Ik ben zeker niet heel deskundig op dit gebied, daarom vraag ik support op dit forum, en ben blij met jullie hulp. Ik heb een WordPress website en wil daar een simpele teller op hebben, die globaal bij gaat houden hoe vaak een pagina bezocht wordt, that's it. Wil geen bloated freemium plugin. En ik vind het juiste leuk om zelf iets te maken, en te begrijpen hoe het werkt. Dat doe ik nu.


@Ozzie PHP
Wat de array betreft, dat was een var dump van de sessie, om te kijken of het werkt.
Iedere pagina genereert dus een nieuwe sessie-variabele.
@Guido

>> Iedere pagina genereert dus een nieuwe sessie-variabele.

Yes ... en beter kun je dus 1 sessie-variabele aanmaken waarin je alle waardes opslaat :-)
Dit in plaats van voor iedere pagina een aparte variabele aanmaken.

Snap je het verschil?
Maar een PHP-sessie ($_SESSION) heeft een beperkte levensduur. Deze is dus niet echt geschikt om hierin over een langere periode / meerdere bezoeken informatie in bij te houden. Als je deze niet ergens anders opslaat (voor statistiek of wat dan ook?) dan gaat deze informatie tussentijds verloren.
@Thomas

Dat hangt dus een beetje er vanaf wat je als een 'bezoek' beschouwt. Meestal wordt een browsersessie als 1 bezoek geteld. Dus als je 's ochtends en 's avonds de site bezoekt, dan zijn dat 2 bezoeken.

Hoe zou je het anders willen doen? Per dag?
Maar waar wordt deze informatie elders vastgelegd? Tenzij je alleen van jezelf ziet welke pagina's je hebt bezocht en je verder helemaal geen historie wilt bijhouden? Dat is nou niet echt wat ik versta onder een "bezoekersteller".

Reageren