Yleistä kurssista |
HTML- perusteita |
PHP-kielen perusrakenteet |
HTML-lomakkeen käsittely |
Tiedoston käsittely |
Evästeiden käyttö |
Istunnon hallinta |
Oppimis- tehtävät |
HTTP-protokollassa ei ole mekanismia, jolla voitaisiin ylläpitää tilatietoja HTTP-pyyntöjen ja vastausten välissä. Tilatietoja tarvittaisiin esimerkiksi silloin, kun istunnon alussa kirjaudutaan palvelun käyttäjäksi ja käyttäjätiedot ovat voimassa palvelun käytön ajan siirryttäessä sivulta toiselle. Evästeet ovat vanhin, Netscapen ehdottama, tapa tilatietojen ylläpitämiseen.
Eväste eli cookie on merkkijono, jonka palvelin lähettää selaimelle Set-Cookie-nimisenä HTTP-otsakkeena tallennettavaksi selaimen muistiin koneen levylle.
Eväste voi koostua seuraavista osista:
Jos selain hyväksyy evästeen, se lähettää siihen liittyvän nimen ja sitä vastaavan arvon HTTP-otsakkeena palvelimelle seuraavissa hakupyynnöissä, jos verkkoalue ja hakupolku täsmää tulevaan hakupyyntöön, voimassaoloaika ei ole mennyt umpeen.
Evästeet tallentuvat palvelimella globaaliin $_COOKIE-taulukkoon.
Evästeisiin liittyvä huono puoli on se, että käyttäjä voi estää evästeiden hyväksymisen selaimessaan, jolloin evästeisiin perustuva palvelu ei toimi.
Koska evästeet kulkevat HTTP-otsakkeissa, on evästeet asetettava setcookie()-funktiolla ennen ennen kuin sivulle voidaan tulostaa mitään edes HTML-moodissa.
Esimerkki, osa 1: Tehdään yksinkertainen sivu, joka laskee evästeen avulla kuinka monta kertaa olet vieraillut sivulla evästeen voimassaoloaikana.
<?php $laskuri=$_COOKIE['laskuri']; $laskuri++; setcookie("laskuri","$laskuri",time()+172800); echo "Olet ladannut tämän sivun " .$laskuri. " kertaa"; ?>
Selitys koodille:
Eväste voidaan poistaa asettamalla sen arvoksi tyhjä merkkijono. Tämä saadaan aikaan kutsumalla setcookie()-funktiota pelkästään nimi-parametrillä. Edellisen esimerkin tapauksessa eväste poistetaan funktiolla setcookie().
setcookie("laskuri");
Esimerkki, osa 2: Toteutetaan edelliseen esimerkkiin toiminto, joka nollaa laskurin poistamalla evästeen.
<?php if(isset($_POST['nollaa'])) { setcookie("laskuri"); echo "Eväste poistettu!"; } else { $laskuri=$_COOKIE['laskuri']; $laskuri++; setcookie("laskuri","$laskuri",time()+86400); echo "Olet ladannut tämän sivun $laskuri kertaa"; } ?> <html> <head> <title>Evästelaskuri</title> </head> <body> <form method="post" action="<?php echo $PHP_SELF;?>"> <input type="submit" value="Lataa uudelleen" name="reload"> <input type="submit" value="Nollaa laskuri" name="nollaa"> </form> </body> </html>