PHP functie eenmalig aanroepen via Javascript
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:
Code (php)
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
Gewijzigd op 26/08/2020 19:09:31 door Guido -
Gewijzigd op 26/08/2020 19:21:45 door - Ariën -
Maar het is toch eigenlijk gewoon een IF statement? Dus waarom wordt de (PHP) functie dan steeds opnieuw aangeroepen wanneer ik pagina ververs? De statement zou verdere uitvoer moeten tegenhouden.
Met dit trouwens hetzelfde resultaat:
PHP wordt eerst door de server uitgevoerd, en javascript als laatste door de browser. JavaScript heeft geen weet van PHP, dus is het vrij logisch dat het PHP-script altijd wordt uitgevoerd.
Gewijzigd op 26/08/2020 20:40:43 door - Ariën -
Guido
Interessant leesvoer:
https://www.ironistic.com/using-php-sessions-in-wordpress
Gewijzigd op 26/08/2020 20:49:58 door - Ariën -
Guido
Kijk eerst of er een sessie bestaat. Bestaat die niet dan maak je die aan.
Ja, en dan? De session start toch altijd eerder dan de uitvoer van mijn function? Dus wat moet ik dan doen om de function éénmalig per browser sessie uit te voeren? Ik snap em niet.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
session_start();
if(!isset($_SESSION['hasPassedFirstVisit'])) {
// Doe je ding!
// Sessie aanmaken.
$_SESSION['hasPassedFirstVisit'] = true;
?>
session_start();
if(!isset($_SESSION['hasPassedFirstVisit'])) {
// Doe je ding!
// Sessie aanmaken.
$_SESSION['hasPassedFirstVisit'] = true;
?>
Maar het lijkt mij abstracter als je jouw functie aanpast.
Ook hier kan simpelweg een cookie volstaan.
Maar misschien ook niet? Het gaat om een bezoekerteller. Die tel je in de regel per browsersessie en dan volstaat de oplossing van Ariën prima.
Vraag van de TS is ook "Dus wat moet ik dan doen om de function éénmalig per browser sessie uit te voeren? Ik snap em niet."
Heren, hartelijk dank.
Arien: ik snap nu ook wat je bedoelt met:
Kijk eerst of er een sessie bestaat. Bestaat die niet dan maak je die aan.
Kijk eerst of een specifieke sessie bestaat.. zo niet, doe je ding en zet sessie alsnog.
Maar ik loop nu wel tegen iets anders aan, waar ik niet aan gedacht had. Ik gebruik de teller per afzonderlijke pagina, maar dat werkt zo niet natuurlijk. Is dan een sessie wel bruikbaar?
Guido
Gewijzigd op 27/08/2020 09:49:10 door Guido -
Die kan toch ook per pagina tellen?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$naam = 600;
if(!isset($_SESSION[ $naam ])) {
// Doe je ding!
// Sessie aanmaken.
$_SESSION[ $naam ] = true;
}
if(!isset($_SESSION[ $naam ])) {
// Doe je ding!
// Sessie aanmaken.
$_SESSION[ $naam ] = true;
}
Uitvoer wordt na laden van de pagina:
Guido
Gewijzigd op 27/08/2020 11:00:36 door Guido -
Een PHP-sessie ($_SESSION) heeft een beperkte levensduur. Deze heeft een timeout en raakt ook "ontkoppeld" wanneer iemand het bijbehorende cookie weggooit.
En wat als iemand cookies uit heeft staan?
Wat omvat volgens jou precies een "unieke bezoeker"?
Maar op zich is het ook wel wenselijk dat de sessie niet direct afsluit als ik browser scherm sluit. Maar ik wou eerst de sessie ansich werkend krijgen.
Het is voor een WordPress website. Ik sla de waarde per pagina op in de database via de WordPress functie update_post_meta(). Na // Doe je ding! roep ik een functie aan die 1 optelt bij de waarde die in de database staat.
Als sessies uitgeschakeld zijn op de server, dan zullen er vast meer problemen met een WordPres website zijn, aangezien sessies daar meer worden gebruikt.
Guido
Guido - op 27/08/2020 11:30:15:
Als sessies uitgeschakeld zijn op de server, dan zullen er vast meer problemen met een WordPres website zijn, aangezien sessies daar meer worden gebruikt.
Guido
Als sessies uitgeschakeld zijn op de server, dan zullen er vast meer problemen met een WordPres website zijn, aangezien sessies daar meer worden gebruikt.
Guido
Huh?
Cookies zijn geen sessies.
Een cookie is bij de bezoeker opgeslagen, en een sessie staat op de server. Wel gebruiken sessies een cookie om de gebruiker te identificeren.
Ik dacht dat een hosting provider het gebruik van PHP-sessies kan blokkeren? En dan zal de cookie dus ook niet aangemaakt kunnen worden. Of begrijp ik het verkeerd?
Ze kunnen het blokkeren, maar daar zou geen reden voor zijn omdat het een veel-gebruikt onderdeel van PHP is. Of er moet een onwetende hostingboer achter de serverknoppen zitten.
>> Een PHP-sessie ($_SESSION) heeft een beperkte levensduur. Deze heeft een timeout en raakt ook "ontkoppeld" wanneer iemand het bijbehorende cookie weggooit.
>> En wat als iemand cookies uit heeft staan?
Dit geldt toch voor alles? Als iemand javascript en/of cookies uit heeft staan dan werkt bepaalde functionaliteit niet. Dit soort "wat als" situaties daar kun je in mijn optiek niet zoveel mee. Als je met sessies werkt dan zijn dit gevallen die kunnen voorkomen, maar je kunt nu eenmaal niet alles 'indekken'.
@Guido
>> $naam = 600;
Zorg dat je overal duidelijke naamgeving gebruikt. Een getal als naam/id van een pagina is super onduidelijk. Gebruik dan bijv. een prefix erbij $naam = 'page_600' of maak het gewoon compleet duidelijk $naam = 'page_contact'. Daarnaast wordt vrijwel altijd gebruikgemaakt van Engels. Dus ik zou dan zelf de voorkeur geven aan $page_id in plaats van $naam, maar goed ... dat is geen vereiste en jouw persoonlijke keuze.
>> Ik dacht dat een hosting provider het gebruik van PHP-sessies kan blokkeren? En dan zal de cookie dus ook niet aangemaakt kunnen worden. Of begrijp ik het verkeerd?
Ja je begrijpt het verkeerd. Een hoster zal PHP-sessies niet blokkeren.