AMVA48-49 HTML ja PHP-ohjelmointi, 2 ov
Yleistä
kurssista
HTML-
perusteita
PHP-kielen
perusrakenteet
HTML-lomakkeen
käsittely
Tiedoston
käsittely
Evästeiden
käyttö
Istunnon
hallinta
Oppimis-
tehtävät
ISTUNNON HALLINTA
  1. Yleistä istunnoista
  2. Istunnon käynnistäminen
  3. Istunnon lopettaminen

1 Yleistä istunnoista

Istunnolla tarkoitetaan toisiaan seuraavia HTTP-pyyntöjä ja vastauksia, joille voidaan määrittää aloitus ja lopetus. Yleensä istunto alkaa palveluun sisäänkirjautumisella ja päättyy uloskirjautumiseen.

Kuten evästeiden yhdessä todettiin, HTTP-protokollassa ei ole keinoa tilatietojen ylläpitämiseen. Jotta palvelin pystyy tunnistamaan samaan istuntoon kuuluvat pyynnöt, on tilatietoja pidettävä yllä asiakaspäässä. Tilatietoja voidaan kuljettaa siirtojen välillä evästeissä, lomakekenttien arvoissa, hyperlinkeissä tai selaimen erityisissä muistialueissa.

Yksi tapa kuljettaa ja ylläpitää tilatietoja on pelkkien evästeiden käyttö. Tällöin jokaisen siirtotapahtuman yhteydessä kuljetetaan lähes kaikki ylläpidettävä data.

Toinen tapa on muodostaa istuntokohtainen tunniste ja kuljettaa vain sitä siirtotapahtumien yhteydessä. Varsinainen istuntoon kuuluva data säilytetään palvelimella istunnon ajan.

Istuntokohtainsen tunnisteen hyvä puolia on mm. se, että mahdolliset autentikointitiedot (käyttäjätunnus, salasana) välitetään vain kerran eikä niitä tallenneta asiakaskoneelle. Myös pyyntöjen yhteydessä kuljetettava datamäärä on pieni, kun kuljetetaan vain tunnistetta.

PHP:ssä on sisäänrakennettuna menetelmä istunnon eli SESSION hallintaan. Palvelimen asetuksissa tulee olla asetus "Session support enabled" päällä. Asian voi tarkistaa vaikkapa phpinfo()-funktion avulla. Tällä kurssilla käytettävällä palvelimella asetus on päällä.

2 Istunnon käynnistäminen

Istunto käynnistetään session_start()-funktiolla. Funktio on oltava jokaisella sivulla, joka kuuluu istuntoon.

Funktio tutkii onko istunto jo käynnissä. Se tunnistaa käynnissäolevan istunnon pyynnön mukana vastaanottamansa istuntotunnisteen avulla. Mikäli istuntoa ei ole käynnissä, funktio luo istuntokohtaisen yksilöllisen istuntotunnisteen. Tunniste tallennetaan palvelimelle ja selaimeen evästeen arvoksi.

Huom! Käytettäessä evästeisiiin perustuvaa istuntotunnistetta, täytyy funktion kutsu olla ennen kuin sivulle tulostetaan mitään muuta edes HTML-moodissa.

Istuntoon kuuluva data tallennetaan palvelimelle $_SESSION-taulukkoon. Niihin viitataan istuntokohtaisen muuttujan nimen avulla.

Esimerkki 1. Asetetaan istuntokohtaisen muutujan laskuri alkuarvoksi 0, kasvatetaan laskuria ja tulostetaan arvo.

session_start();
$_SESSION['laskuri'] = 0;
$_SESSION['laskuri']++;
echo $_SESSION['laskuri'];

Esimerkki 2. Aloitetaan istunto ja alustetaan istuntokohtaiset muuttujat sivulla 1. Hyödynnetään muuttujia sivulla 2.

<?php
// sivu1.php
session_start();

echo "Tervetuloa sivulle 1";

$_SESSION['laskuri'] = 1;
$_SESSION['aika']    = time();

echo "<br><a href=\"sivu2.php\">Sivulle 2</a>";
?> 
<?php
// sivu2.php
session_start();

echo "tervetuloa sivulle 2<br>";

$_SESSION['laskuri']++; 
echo "Laskuri on ".$_SESSION['laskuri']; 

echo "<br>Istuntosi alkoi ".date("d.m.Y H:i:s", $_SESSION['aika']);
$kesto=time()-$_SESSION['aika'];
echo "<br> Istunto on kestänyt " .$kesto. " sekuntia."
?> 

3 Istunnon lopettaminen

Istunto täytty muistaa tietoturvasyistä aina tuhota, kun se päättyy. Yleensä tämä tehdää Lopeta- tai Kirjaudu ulos-toimintoon. Käyttäjät tulee aina ohjata lopettamaan palvelun käyttö kyseisen toiminnon kautta.

Funktio session_destroy() tuhoaa kaiken istontoon liittyvän datan. Se ei poista globaalien muuttujien arvoja tai istontoon liittyvää evästettä. Eväste on poistettava erikseen.

Esimerkki 3 . Uloskirjautumistoiminnon koodi voisi olla seuraava.

<?php
session_start();

// Tyhjennetään kaikki istuntokohtaiset muuttujat
$_SESSION = array();

// Poistetaan istuntokohtainen eväste
if (isset($_COOKIE[session_name()])) 
{
   setcookie(session_name(), '', time()-42000, '/');
}

// Tuhotaan lopuksi istunto
session_destroy();
?>