Hoe voorkom ik 1000x refresh per seconde?
Hoe kan ik dit voorkomen? Omdat de site 1x per minuut wordt bijgewerkt (gegevens mbt het weer) heeft het voor een bezoeker geen zin om vaker dan 1x per minuut de gegevens opnieuw uit de database te halen . Is PHP-sessies hier de oplossing voor? En zo ja, wat sla ik dan op in een sessie?
Als de berekeningen zo zwaar zijn dan kun je het beter zo maken dat de pagina die alles weer geeft statisch is. Je kunt deze laten genereren en opslaan nadat je de database hebt bijgewerkt.
In een database opslaan hoevaak iemand de site bezoekt. Als dit vaker dan 100 keer per minuut is dan geef je hem een mooie IP-ban.
HTML 304 (Not Modified)
http://www.w3.org/Protocols/rfc2616/rfc2616.html
Je kunt een soort ID meegeven met je responce die krijg je bij een refresh terug, en kun je kijken of hij veranderd is. Zo niet geef je een 304 terug.
Dit werkt zeer handig bij plaatjes die op je server staan. Je kunt de mod_date in de ID zetten, en als je een refresh hebt met een ID dan check je de mod_date van het bestand. Is hij niet gewijzigd hoef je het bestand niet nog eens te verzenden. (kost je minder geld dan...)
maar je kunt het beste kijken bij:
http://nl.php.net/manual/en/function.session-start.php
Voor het starten van je sessie, en dan:
http://nl.php.net/manual/en/reserved.variables.php
http://nl.php.net/manual/en/reserved.variables.session.php
Voor je ARRAY waar je gegevens in op kunt slaan, bv:
$_SESSION["GEBRUIKER"] = .....New User();
of
$_SESSION["SYSTEEM"] = array();
$_SESSION["SYSTEEM"][GEBRUIKER] = $GEBRUIKER;
en met array_key_exists("Zoeken", $_SESSION) kun je kijken of hij al bestaat...
Veder kun je beter geen complexe SQL af vuren. En als je dat doet 'bewaar' het resultaat in een file.
Groetjes: Lucifer
Ik wil dit met de volgende code doen:
blablabla
$cachefile = "index.html";
$fp = fopen($cachefile, 'w');
fwrite($fp, ob_get_contents());
fclose($fp);
ob_end_flush();
En door te controleren hoe oud het cachebestand is (wel of niet ouder dan bv 1 minuut), wel of niet de statische pagina weer te geven. Is dit een goede oplossing?