Keksien käyttö PHP:llä
Mureakuha
Sisällysluettelo |
PHP ja evästeet
PHP:llä voidaan helposti käsitellä selaimen evästeitä. Niihin voidaan varastoida tietoa asiakaspäähän myöhempää käyttöä varten. Yleisiä käyttökohteita ovat esimerkiksi session tunniste tai viimeisen vierailukerran aikaleima. Mitään arkaluontoista tietoa evästeisiin ei kannata tallentaa koska ne tallentuvat käyttäjän koneelle.
Evästeen lukeminen
Evästeen arvon lukeminen on helppoa, ja tapahtuu näin:
<?php echo $_COOKIE["keksi"]; ?>
Evästeen asettaminen
Keksin asettaminen tapahtuu funktiolla SetCookie().
Esimerkki:
<?php SetCookie("keksi", "sisältö"); ?>Tämä luo keksin nimeltä "keksi" ja asettaa sen sisällöksi "sisältö".
Keksi täytyy asettaa ennen muuta tulostettavaa! (vrt. 'Headers already sent'-virheilmoitus.) Tämä siksi, että käsky asettaa keksi annetaan selaimelle sivupyynnön headereissa. Tekniikka toimii myös toiseen suuntaan: kun selain pyytää jotain sivuja, se välittää pyynnön headerissa tiedon niistä kekseistä, joita selaimessa on kyseiselle sivulle asetettuna. Tästä seuraa sivuvaikutuksena se, ettei keksin arvon lukeminen toimi vielä samalla sivulatauksella kuin sen asettaminen:
<?php SetCookie("keksi", "sisältö"); ?> <html> <body> <p>Keksin sisältö on <?php echo $_COOKIE['keksi']; ?></p> <!-- tuloksena ensimmäisellä sivulatauksella tyhjää, myöhemmillä 'sisältö' --> </body> </html>
Tämä siksi, että eihän selaimen sivupyynnössä voinut olla tietoa keksistä, kun se vasta vastauksessa sai tiedon, että keksi piti asettaa. Keksin arvo on siis käytettävissä vasta toisella sivupyynnöllä. Jos halutaan, että arvo olisi välittömästi käytössä, voidaan tehdä esimerkiksi uudelleenohjaus keksin asettamisen jälkeen:
<?php if (isset($_POST['tallennettava_asetus'])) { SetCookie('tallennettava_asetus', $_POST['tallennettava_asetus']); Header("Location: ".$_SERVER['PHP_SELF']); } ?>
Tällöin uudelleenohjaus pitää tietysti ehdollistaa johonkin, ettei päädytä loputtomaan uudelleenohjausketjuun. Esimerkissä $_POST-taulukko tyhjentyy uudelleenohjauksen seurauksena, joten ehto toteutuu vain kerran.
Evästeen aikarajoitus
Kekseille voidaan myös määritellä katoamisaika sekunnin tarkkuudella.
Tämän ominaisuuden toimivuus on kuitenkin käytännössä täysin selaimesta kiinni, ja vaikkakin se ainakin melkein kaikissa selaimissa sinänsä toimiikin, voi väärässä ajassa oleva kello aiheuttaa keksin välittömän vanhenemisen tai vanhentaa keksin esimerkiksi vasta kymmenen vuoden päästä.
Tämän takia keksin vanhenemiseen ei ikinä pidä luottaa missään vähänkään kriittisemmässä sovelluksessa, esimerkiksi sisäänkirjautumisen toteutuksessa, vaan kirjautumistarkistus tulee tehdä aina palvelimen päässä. Jos tarkistus tehdään palvelimen päässä, kannattaa keksin vanhenemisaika laittaa tarpeeksi kauas - vaikkapa kymmenen vuotta, koska useimmiten koneiden kellot kuitenkin vuosien tarkkuudella ovat oikein ;-)
Esimerkki vanhenemisajan määrittämisestä:
<?php SetCookie("keksi", "sisältö", Time()+60*60); // Tämänhetkinen aika + 60 sekuntia * 60 minuuttia = 1 tunti eteenpäin. ?>
Tämä luo keksin joka katoaa tunnin päästä sen lähettämisestä, mikäli selaimen kello on oikeassa ajassa. Mikäli asetat ajaksi 0, keksi on koneella kunnes selain suljetaan.
Evästeen poistaminen
Evästeet voidaan myös poistaa asettamalla aika menneisyyteen. Esimerkki:
<?php SetCookie("keksi", "sisältö", Time()-9999); // Tämänhetkinen aika - 9999 sekuntia ?>
Ota huomioon, että myös tämän ajan "menneisyydessä oleminen" riippuu sivun käyttäjän aika-asetuksista, eikä siihen siis kriittisissä sovelluksissa ole luottamista.
| Tämä artikkeli on tynkä. Voit auttaa Kuhaa täydentämällä tämän sivun tietoja. |
