Sähköisten asiointipalveluiden toteuttaminen

Sorakuilu

Tiedon siirto tiedostojen välillä, header, istunnot, evästeet, piilokentät

Kuinka tilatietoja tallennetaan piilokenttiin

Lomakkeeseen voidaan piilottaa tietoja - tällöin käytetään piilokenttää

<form> <input type="hidden" name ="piilotettu" value="arvo">

Valuen arvo siirtyy samalla tavalla kuin muidenkin kenttien arvo lomakkeen lähetyksen yhteydessä vastaanottavalle tiedostolle.

PHP - Kuinka käyttäjä ohjataan uudelle sivulle

Kun asiakas on tehnyt pyynnön (http-request), palvelin lähettää vastauksen (hhtp-response). Ensiksi palvelin lähettää edeltäviä tietoja (header) asiakkaalle, vasta header-osuuden jälkeen se lähettää varsinaisen sivun.

header-osuudessa voidaan tehdä määrityksiä eri toimintoja varten (mm. istunnot, evästeet ja uudelleenohjaus).

Huomaa, että ennen headeria ei voi tulostaa html:ää, sillä header on lähetettävä ensimmäisenä.

Esimerkki uudelleenohjauksesta

<?php header("Location: index.php?sivu=sivu5); // Ohjaa selaimen uuteen osoitteeseen // Jos alapuolella on koodia, varmista että sitä ei ajeta uudelleenohjauksen jälkeen exit; ?>

Yleinen käyttötarkoitus headereilla (edelleenohjauksen lisäksi) on estää sivun lisääminen välimuistiin. Seuraava esimerkki toimii lähes kaikilla selaimilla.

<?php header("Expires: Mon, 25 Jan 1995 02:00:00 GMT"); // vanhentumispäivämäärä menneisyydestä (aina vanhentunut) header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // muokattu nyt (vaatii palvelimen kellon olevan oikeassa ajassa) header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1, ei säilytetä välimuistissa header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0, ei säilytetä välimuistissa ?>

Evästeet

Eväste (keksi tai pipari, engl. cookie) on dataa, jonka web-palvelin tallentaa käyttäjän tietokoneelle. Selain lähettää evästeet vain kyseiselle palvelimelle. Data on taulukkomuodossa ja sijoitetaan muuttujaan $_COOKIE.

Evästeet ovat joko istuntokohtaisia engl. session cookie ja pysyviä engl. persistent cookie. Istuntokohtaiset evästeet vanhenevat kun käyttäjä lopettaa istunnon web-palvelussa, ja pysyvät evästeet säilytetään tiettyyn aikarajaan asti tai kunnes käyttäjä ne tuhoaa.

Käyttötavat

  1. Istunnonhallinta
  2. Seuranta
  3. Personointi
  4. Kolmannen osapuolen evästeet

Evästeen asetus

setcookie("Cookiennimi","arvo",time() +3600)

Määrittää ajaksi 1 tunnin.

Tarkistus - käyttötilanteessa

if(isset($_COOKIE['Cookiennimi'])) .....

if(isset($_COOKIE['cookie'])) { foreach ($_COOKIE['cookie'] as $name => $value) { echo "$name : $value \n"; } }

Viittaus evästeeseen

$nimi=$_COOKIE['Cookiennimi']

Evästeen poistaminen

setcookie("Cookiennimi","arvo",time() -3600)

Eväste poistetaan laittamalla ajan arvoksi negatiivinen luku, tässä 1 tunti.

Istunto, SESSION

PHP sisältää sisäänrakennetun istuntojärjestelmän, joka yleisesti käyttää hyväkseen evästeitä istuntotunnuksen tallentamisessa, ja osaa sijoittaa istuntotunnuksen myös jokaiseen PHP:n generoimaan hyperlinkkiin.

PHP:n istunto voi tallettaa tietoja palvelimen superglobaaliin taulukkomuuttujaan $_SESSION, käyttötarkoitus voi olla sama kuin evästeillä. Istunto on turvallisempi (palvelimella) kuin eväste.

PHP:n istunto häviää selaimen viimeisen ikkunan sulkeuduttua eikä istuntoa voi tallentaa ilman ulkopuolista ohjelmaa tai tietoa (kuten selaimen istuntotallennusmekanismia tai evästettä).

Istunnon aloitus

session_start() luo istunnon tai palauttaa olemassaolevan käyttöön (tunnisteen avulla, joka lähetetään joko GET tai POST pyynnössä tai evästeessä.

Jos haluaa käyttää nimettyä istuntoa, tulee kutsua session_name() - funktiota ennen kuin kutsuu session_start() - funktiota.

sivu1.php

<?php session_start(); echo "Tervetuloa sivulle 1"; $_SESSION['lempivar'] = 'green'; $_SESSION['lemmikki'] = 'cat'; $_SESSION['aika'] = time(); // Toimii, jos istunto saatiin asetettua echo '<a href="sivu2.php">sivu 2</a>'; // Voi viedä mukanaan tarvittaessa myös session_id:n echo "<a href="page2.php?" . SID . '">sivu 2</a>'; ?>

Sivu 1:n käytön jälkeen istunto on olemassa myös sivulla 2.

Esimerkin sivu2.php

<?php session_start(); echo 'Tervetuloa sivulle #2<br>'; echo $_SESSION['lempivar']; // green echo $_SESSION['lemmikki']; // cat echo date('Y m d H:i:s', $_SESSION['aika']); echo '<br><a href="sivu1.php">page 1</a>'; ?>

Istunnon id:n muuttaminen

Tietoturvasyitä id kannattaa päivittää:

session_regenerate_id;

Istunnon lopetus

session_start(); //palauttaa istunnon sivun alussa
session_unset(); //tyhjentää istuntomuuttujat
session_destroy(); //poistaa koko istunnon

Istunnon keskeytys, jos käyttäjä pitää liian pitkän tauon

<?php if (!isset($_SESSION['timeout_idle'])) { $_SESSION['timeout_idle'] = time() + MAX_IDLE_TIME; } else { if ($_SESSION['timeout_idle'] < time()) { //destroy session } else { $_SESSION['timeout_idle'] = time() + MAX_IDLE_TIME; } } ?>