Sessiot, evästeet ja tiedostot - Demo 5

Harjoitellaan sessioiden käyttöä WWW-sovelluksen tekemisessä. Toteutaan ensin sessioilla yksinkertainen lomake, joka laskee lukuja yhteen. Yritetään sen jälkeen toteuttaa vastaava lomake evästeiden avulla. Lisäksi toteutetaan lomake, jolla voi kirjoittaa rivin tekstitiedostoon tai tyhjentää tekstitiedoston. Lopuksi toteutetaan yksinkertainen lomake, jolla voi ladata tiedoston palvelimelle.

Laskuri sessioilla

Laskuri

  1. Luo aluksi normaali XHTML-sivu PHP:lla. Tallenna sivu W-asemalle.
  2. Tee body-osaan lomake, jonka action-attribuutissa on $_SERVER['PHP_SELF']. Lisää lomakkeelle tekstilaatikko, jonka otsikkona (label) on "Anna luku" ja name-ominaisuudessa luku. Lisää lomakkeelle lisäksi submit-painike.
  3. Määrää tekstilaatikko hakemaan arvonsa (value) $_REQUEST-muuttujasta. Kokeile lomakkeen toimintaa.
  4. Summan tuloksen säilyttämiseksi tarvitaan sessiomuuttujaa. Lisää lomakkeen alkuun komento session_start();.
  5. Tarkasta ennen lomakkeen tulostamista, onko lukua $_REQUEST-muuttujassa (isset()). Jos luku löytyy, niin tarkista onko se numero (is_numeric()). Jos luku on numero, niin tarkasta löytyykö sessiomuuttujaa summa. Jos muuttuja löytyy, niin lisää muuttujan arvoon $_REQUEST-muuttujassa oleva arvo. Jos sessiomuuttujaa ei ole, niin luo sellainen ja laita arvoksi $_REQUEST-muuttujassa oleva arvo.
    if(isset($_SESSION['summa'])) {
      $_SESSION['summa'] += $_REQUEST['luku'];
    } else { 
      $_SESSION['summa'] = $_REQUEST['luku'];
    }
  6. Jos sessiomuuttuja summa on asetettu, niin tulosta sen arvo body-osassa.
  7. Testauksessa kannattaa käyttää Web Developer Toolbarista löytyvää valintaa Cookies | Clear Session Cookies. Näin pääset laskurin alkutilaan.

Sessiot ja client-server

Laskuri evästeillä

Edellisen esimerkin laskurin voisi periaatteessa tehdä evästeillä. Tällöin summaa olisi mahdollista tallentaa myös selaimen sulkemisen ajaksi. Muuta edellisen esimerkin laskuri toimimaan evästeillä sessioiden sijaan.

  1. Evästeen asettaminen: setcookie('summa', $_REQUEST['luku'], time()+24*60*60);
    • Eväste on asetettava ennen varsinaista dokumenttia, koska se tulee HTTP-otsikkotietoihin.
    • Evästeen kestoksi tulee siis yksi päivä.
  2. Evästeeseen viittaaminen: if(isset($_COOKIE['summa']))...
  3. Testaa laskurin toimintaa. Kokeile myös sulkea välillä selain ja palata sitten samalle sivulle.
    • Toiminnasta huomaa sen virheen, että summa päivittyy oikeaksi aina vasta seuraavalla sivun latauksella. Tämä johtuu siitä, että evästeen arvo on käytettävissä aina vasta seuraavalla sivun latauskerralla. Sessioissa taas arvoa voidaan käyttää heti sen asettamisen jälkeen.
    • Evästeet voi poistaa Web Developer Toolbarin toiminnolla Cookies | Delete Path Cookies.
  4. Korjaa toiminta siten, että tuloksena näytetään evästeen arvon ja lomakkeelta lähetetyn arvon summa.
    • Voit hyödyntää myös dokumentin alussa tehtyjä jossitteluja. Sijoita näytettävä arvo esimerkiksi $summa-muuttujaan.

Toinen vaihtoehto olisi tehdä jokin välisivu ennen summan näyttämistä. Näin saisimme väliin evästeiden vaatiman yhden ylimääräisen sivun latauksen.

Evästeet ja client-server

Tiedostojen käsittely

Tiedostojen käsittely

Tehdään lomake, jolla voi kirjoittaa rivin tiedostoon tai tyhjentää tiedoston.

Tiedoston lataus palvelimelle

Tiedoston lataus

Tehdään yksinkertainen lomake, jolla voi ladata tiedoston palvelimelle.

Lisätehtävä

Laajenna tiedoston käsittelytehtävää siten, että aluksi kysytään käyttäjältä minkä nimistä tiedostoa käsitellään. Sen jälkeen haetaan kyseisen tiedoston sisältö lomakkeelle textarea-kenttään. Käyttäjä voi sitten tehdä tiedostoon muokkauksia ja muokkaukset tallennetaan samaan tiedostoon käyttäjän painettua submit-painiketta. Tällä periaatteella voisi siis esimerkiksi tehdä alkeellisen nettisivujen päivitystoiminnon ilman, että sivuja tarvitsisi siirrellä FTP:llä tai SSH:lla. Palveluun olisi luonnollisesti järkevää päästä vain kirjautumisen kautta väärinkäytösten estämiseksi.

Käyttäjien kommentit

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/sovellukset/demot/demo5/
© Antti Ekonoja (anjoekon@jyu.fi) <http://users.jyu.fi/~anjoekon/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
Jukka Mäntylä (jmantyla@iki.fi) <http://www.iki.fi/jmantyla/>
2008-03-17 10:48:48
Informaatioteknologia - Jyväskylän yliopiston IT-tiedekunta ja avoin yliopisto