Perl en CGI scripts 2Op de eerste pagina:
Op deze pagina:
Op de volgende pagina: Dit is een vervolg-pagina op deel 1! Op deze pagina wat meer gevorderde onderwerpen: hoe krijg je informatie van een aanroep van je script naar het volgende (op der server is iedere aanroep een nieuwe), en wat is er nodig voor zaken als beveiliging? State overdracht: het probleemEen probleem met cgi-scripts is dat iedere aanroep als een nieuwe aanroep
wordt gezien (het is een 'stateless' protocol). Heb je een CGI script waar je
in meerdere aanroepen doorheen loopt (b.v. eerst inloggen, dan een keuze maken,
dan daar iets mee doen; en dit iedere keer bijvoorbeeld via een nieuwe
Het probleem is te splitsen in twee varianten:
State overdracht tussen opeenvolgende aanroepenHier zijn verschillende methodes voor. Wat ik zelf doe (bij beperkte
hoeveelheid state), is deze meegeven aan de pagina die wordt weergegeven in
reactie op het aanroepen van de cgi door de gebruiker. Op deze nieuwe pagina
komt ook vast minimaal een <form
action="http://www.je_web_site.nl/cgi/argument.cgi" method="post"> Hier is een input met type Een alternatief (bij erg veel state) is de state op de server opslaan in een database of file, en alleen een session ID (een of ander volgnummer) meegeven in een hidden input field. Het cgi script kan nu via deze session ID weten welke state er bij hoort (ook handig als de gebruiker bijvoorbeeld meerdere pagina's open zou kunnen hebben, waarbij de state tussen de pagina's inconsistent kan raken als je deze direct in de hidden fields van de diverse pagina's hebt staan). Wel moet je dan nu en dan de database opschonen met state van sessies die door de gebruiker al niet meer in gebruik zijn (bijvoorbeeld meer dan een dag oud). Cookies explained (Koekjes uitgelegd)Cookies zijn kleine pakketjes, die door de server naar je browsers worden verstuurd, en daar bewaard zullen blijven. Ze kunnen vervolgens weer door de browser worden opgehaald. Ze zijn heel handig om data te bewaren tussen sessies; zodat je een volgende keer verder kunt waar je gebleven was. Ook voor het bewaren van wachtwoorden en dergelijke zijn ze handig, zodat je niet iedere keer opnieuw hoeft in te loggen. De naam is gebaseerd op de Chinese gelukskoekjes, van die knapperige gevouwen rondjes met een briefje met gelukswens er in. Cookies zijn niet per se fout, maar worden ook nogal eens gebruikt om internetgedrag te volgen, en worden daardoor gewantrouwd. Hierdoor heeft niet iedereen cookies toegelaten; je kan dus niet 100% op de werking vertrouwen! Het lezen van een cookie gaat heel eenvoudig. Elke cookie heeft een naam. De
waarde van cookies horende bij je set met web-pages (afhankelijk van domeinnaam
en directory) worden door de browser automatisch opgehaald, en met de
Het zetten van een simpel cookie is niet veel moeilijker; je maakt een nieuw
cookie voordat je de nieuwe pagina genereert, en je geeft de nieuwe cookie mee
aan de my $oldcookie = cookie('meer_data') || 'No cookie
set'; Meer mogelijkheden staan uitgelegd in de documentatie van van de CGI.pm module. Denk er wel aan: cookies zijn gewoon tekstuele informatie, en worden ook zo opgeslagen en over internet verstuurd (behalve bij beveiligde verbindingen); gebruik ze dus niet voor gevoelige (privé) gegevens. Nog even een paar tips:
Meer informatie? Zoek eens op Google naar 'Perl CGI cookies', of kijk naar onderstaande links:
Security en de -T optieDe -T optie (Taint checking mode)De -T optie op de eerste regel van een cgi script ( Om dit te voorkomen worden alle gegevens van buiten als 'tainted' gemerkt
(vies, bedorven), en met de Out-of-memoryVoorkomen van out-of-memory attacks (leukerds die je opeens 100 Mbyte willen
sturen om je systeem te laten crashen): zie de documentatie van de CGI.pm module voor de
volgende instellingen (neem statements op direct na het ' $CGI::POST_MAX=1024 * 100; # max 100K
size posts Meer informatie
|
op mijn site |