Demo 11, eväste ja istunto
Eväste (tai keksi) säilytetään käyttäjän selaimessa, käytännössä globaali muuttuja joka on olemassa tietyn ajan (tai kunnes välimuisti tyhjennetään). Istunto (sessio) säilöö uniikin ID-luvun client-puolella ja varsinaisen tiedon server-puolella.
Keksien käyttö on yksinkertaisempaa mutta sisältävät tietoturvariskin (keksit luettavaa tietoa selaimessa).
demo11a.php
Laadi tiedosto demo11a.php. Tee lomake jolla voidaan syöttää keksille arvo ja toinen lomake jolla voidaan tyhjentää keksi.
Tee ensin lomake
<form method="post"> <label for="keksi">Syötä keksille tieto</label><br /> <input type="text" name="keksi" value="" /><br /> <input type="submit" value="Tallenna keksi" /><br /> </form>
<form method="post"> <input type="submit" name="tyhjenna" value="Tyhjennä keksi" /> </form>
Tämän jälkeen lisää yläpuolelle lomakkeenkäsittelijä:
// lomakkeen käsittely
if (isset($_POST["keksi"])) {
// yritetään tallentaa
setcookie("keksi",$_POST["keksi"], time() +1800);
}
Tyhjentäminen menee seuraavasti
// jos lähetetään tyhjennä:
if (isset($_POST["tyhjenna"])) {
setcookie("keksi","", time() -1800);
}
demo11b.php
Laadi toinen tiedosto demo11b.php jolla näytetään lomake salasanan syöttämistä varten.
- Lomakkeenkäsittelijässä tarkistetaan tuliko salasana, jos salasana on "salasana" niin tulostetaan teksti "Tunnus oikein" ja tallennetaan salasana evästeeseen.
- Jos salasana on jotain muuta niin tulostetaan tunnus väärin ja tuhotaan eväste.
- Jos kirjauduttu-eväste löytyy niin näytetään uloskirjautuminen, muuten näytetään kirjautuminen.
1. Tee aluksi lomake, näytetään joko sisäänkirjautuminen tai uloskirjautuminen
<?php
// lomakkeenkäsittely
// apumuuttuja - ollaanko kirjauduttu
$ok = false; // oletuksena ei kirjauduttu
// -- TÄHÄN LOMAKKEENKÄSITTELIJÄ --
// 1. jos ei olla kirjauduttu
if ($ok == false) {
?>
<form method="post">
<label for="password">Syötä salasana</label><br />
<input type="password" name="password" /><br />
<input type="submit" value="Kirjaudu" />
</form>
<?php
}
else {
// 2. jos ollaan kirjauduttu niin
?>
<form method="post">
<input type="submit" name="logoff" value="Kirjaudu ulos" />
</form>
<?php
}
?>
2. Lomakkeenkäsittelijässä tarkistetaan onko eväste tallennettu tai onko syötetty oikea salasana
if (isset($_COOKIE["ok"])) {
$ok = $_COOKIE["ok"];
}
else if (isset($_POST["password"])) {
if ($_POST["password"] == "salasana") {
// käyttäjä antoi oikean salasanan
setcookie("ok", true, time() +1800);
echo "Tunnus oikein!";
$ok = true;
}
else {
// käyttäjä antoi väärän salasanan
echo "Tunnus väärin :( ";
}
}
Viimeinen asia on uloskirjautuminen - tyhjennetään eväste jos painetaan logoff-nappia:
// jos painettiin logoff-submit:
if (isset($_POST["logoff"])) {
setcookie("ok","", time() -1800);
$ok = false;
}
demo11c.php
Tehdään kirjautuminen myös käyttäen istuntoa.
1. Käytä samanlaista alkuosaa kuin evästeen kanssa, vain lomakkeenkäsittelijä on erilainen.
2. Lomakkeenkäsittelijässä tarkistetaan syöte ja kirjaudutaan:
// lomakkeenkäsittely
session_start(); // ottaa istunnon käyttöön
// apumuuttuja - ollaanko kirjauduttu
$ok = false; // oletuksena ei kirjauduttu
if (isset($_SESSION["ok"])) {
$ok = true;
}
if (isset($_POST["password"])) {
if ($_POST["password"] == "salasana") {
echo "Salasana oikein!";
$ok=true;
$_SESSION["ok"] = true;
}
else {
echo "Salasana meni väärin...";
$ok = false;
}
}
if (isset($_POST["logoff"])) {
session_unset();
session_destroy();
}