Viikkotehtävä 5
Tällä viikolla harjoitellaan PHP:n sessioiden ja evästeiden käyttämistä sekä tiedostojen käsittelyä ja tiedoston latausta palvelimelle lomakkeen avulla. Tehtäville yhteiset vaatimukset:
- Käytetään PHP-kieltä.
- Kommentoikaa koodin oleellisimpia osia!
- Kaikkien sivujen on oltava validia XHTML 1.0 Strictiä.
- Valmiin PHP-ohjelman pitää toimia users.jyu.fi:ssä.
Taso 1
Toteuta sessioilla kirjautumispalvelu:
- Tee PHP-sivu (testi.php), jolle tulee päästä vain silloin, kun sessioilla toteutettu kirjautuminen
(login.php, jonka tekeminen ohjeistettu alempana) on voimassa.
- Jos kirjautuminen ei ole voimassa, käyttäjä ohjataan kirjautumissivulle (login.php, jonka tekeminen ohjeistettu alempana).
- Tee sivulle ainakin "uloskirjautuminen"-linkki, muulla sisällöllä ei ole väliä. Linkkiä klikkaamalla tulee hoitaa käyttäjän uloskirjautuminen (login.php:n avulla). Uloskirjautumisen jälkeen käyttäjä ohjataan login.php-sivulle, eikä testi.php-sivulle tule luonnollisestikaan päästä ennen uutta kirjautumista.
- Tee PHP-sivu (login.php), joka hoitaa kirjautumisen:
- Tee sivulle lomake, jossa kysytään käyttäjätunnusta ja salasanaa käyttäjältä.
- Olemassa olevat käyttäjät ja salasanat haetaan users.txt-tiedostosta (kopioi tiedosto omaan hakemistoosi). Tiedostossa on siis yksi käyttäjä per rivi muodossa "kayttajatunnus|nimi|salasana".
- Jos käyttäjän antama käyttäjätunnus ja salasana löytyvät tiedostosta samalta riviltä, käyttäjä ohjataan aiemmin tehdylle testi.php-sivulle. Tämän jälkeen testi.php-sivulle tulee päästä ilman kirjautumista uloskirjautumiseen tai selaimen sulkemiseen saakka.
- Jos käyttäjätunnus tai salasana oli väärä, tulostetaan asianmukaiset virheilmoitukset ja palautetaan käyttäjä takaisin kirjautumissivulle. Virheilmoituksessa tulee eritellä virhe tarkemmin (esimerkiksi "Käyttäjätunnus oli oikea, mutta salasana väärä." tai "Käyttäjätunnusta ei löytynyt.")
- Sivun tulee hoitaa myös uloskirjautuminen (kun on painettu "uloskirjautuminen"-linkkiä testi.php-sivulla).
Taso 3
Laajenna 1. tason kirjautumispalvelua myös rekisteröitymispalveluksi (toteutus edelleen sessioilla):
- testi.php- ja login.php-tiedostojen toteutus aluksi 1. tason tehtävän kaltainen, seuraavat kohdat täydentävät niitä.
- Kirjautumissivulla on linkki "rekisteröidy", jota painamalla käyttäjä ohjataan rekisteröitymiseen (login.php voi hoitaa senkin tai siihen voi tehdä uuden tiedoston).
- Rekisteröitymisessä käyttäjältä kysytään lomakkeella nimi, käyttäjätunnus ja salasana. Salasana kysytään kahteen kertaan. Salasanaa kysyttäessä käytettävä password-kenttää, eli salasana ei saa näkyä kirjoitettaessa. Nimi ei saa olla tyhjä, lisäksi käyttäjätunnuksen ja salasanan tulee olla vähintään 5 merkkiä pitkiä. Kahta samaa käyttäjätunnusta ei saa olla. Mihinkään kohtaan ei saa myöskään syöttää "|"-merkkiä. Salasanan tulee olla luonnollisesti sama molemmilla syöttökerroilla. Rekisteröitymissivulla tulee olla linkki myös kirjautumissivulle.
- Jos käyttäjän antamat tiedot ovat sopivia (edellisen kohdan vaatimukset täyttyvät), lisätään käyttäjän tiedot users.txt-tiedostoon (kirjoitetaan tiedoston loppuun uudelle riville) muotoon "kayttajatunnus|nimi|salasana". Salasana tulee tallentaa tiedostoon salatussa muodossa (md5). Tulostetaan lisäksi käyttäjälle ilmoitus onnistuneesta kirjautumisesta ja ohjataan käyttäjä automaattisesti kirjautumissivulle.
- Jos käyttäjän antamat tiedot olivat puutteellisia, käyttäjä palautetaan lomakkeelle ja tulostetaan asianmukaiset virheilmoitukset (mikä rekisteröitymisessä meni väärin).
- Kirjautumisessa salasana tulee tarkistaa salattuun muotoon (md5) tallennetusta salasanasta.
- Tee testi2.php-sivu, jonka sisällöksi laita vähintään linkki testi.php-sivulle. testi2.php-sivulle tulee päästä vain silloin, kun kirjautuminen on voimassa. Jos kirjautuminen ei ole voimassa, käyttäjä ohjataan automaattisesti kirjautumiseen.
- Tee testi.php- ja testi2.php-sivuille lisäksi evästeillä ominaisuus, joka tarkastaa sivua ladatessa, kauanko edellisestä jomman kumman sivun lataamisesta on kulunut aikaa. Jos aikaa on kulunut yli 20 sekuntia (normaalisti esimerkiksi verkkopankeissa vastaavan toiminnon aikaraja on paljon suurempi, mutta nyt käytetään lyhyttä aikaa testaamisen helpottamiseksi), käyttäjä kirjataan ulos ja siirretään automaattisesti kirjautumiseen. testi.php- tai testi2.php-sivuille ei tule päästä ennen uutta kirjautumista.
Taso 5
Tee ensin kaikki 3. tason tehtävät. Tee lisäksi testi.php-sivulle lomake, jolla voi ladata kuvan palvelimelle seuraavien ohjeiden mukaan:
- Tee siihen hakemistoon, jossa testi.php-tiedosto sijaitsee, kansio kuvat. Kuvat tulee tallentaa jatkossa lomakkeella kyseiseen kansioon.
- Kuvien latauslomakkeella tulee olla tiedostokentän ja submit-painikkeen lisäksi tekstikenttä, johon pyydetään kuvan nimi (ei siis tarvitse olla sama kuin kuvan tiedostonimi) käyttäjältä.
- Kuvaa ladatessa täytyy tarkistaa seuraavat seikat. Jos joku kohta ei toteudu, tulee käyttäjä palauttaa lomakkeelle ja
tulostaa asianmukaiset virheilmoitukset sekä lisäksi käyttäjän mahdollisesti jo syöttämä kuvan nimi valmiiksi lomakkeelle,
ettei sitä tarvitse kirjoittaa uudelleen.
- Kuvan maksimikoko 500 kt.
- Hyväksyttävät tiedostopäätteet jpg, gif ja png. Isoilla ja pienillä kirjaimilla ei saa olla merkitystä.
- Kahta samannimistä (tiedostonimi) kuvaa ei voi tallentaa.
- Tulosta lisäksi näkyville selkokielisenä mahdolliset $_FILES['tiedosto']['error']-muuttujaan tiedoston siirrossa tallentuneet virheet (joku virhe tulee aina silloin kyseiseen muuttujaan, kun tiedoston siirto epäonnistuu).
- Kuvan tiedostonimien samankaltaisuuden testausta varten tallenna aina kuvaa lisätessä erilliseen tekstitiedostoon (esimerkiksi kuvat.txt) kuvalle annettu nimi, kuvan tiedostonimi ja latausajankohta (pyydä aika palvelimelta järkevässä muodossa, esim. "21.3.2007 16:22") muotoon "kuvan_nimi|kuvan_tiedostonimi|latausajankohta". Joka kuvalle tulee olla oma rivi tekstitiedostossa.


Käyttäjien kommentit