Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

PHP ja sessionhallinta Verkkotekniikan jatkokurssi Kevät 2003 V. Seppänen

Samankaltaiset esitykset


Esitys aiheesta: "PHP ja sessionhallinta Verkkotekniikan jatkokurssi Kevät 2003 V. Seppänen"— Esityksen transkriptio:

1 PHP ja sessionhallinta Verkkotekniikan jatkokurssi Kevät 2003 V. Seppänen (rissepp@cc.jyu.fi)

2 Tilattomuus • HTTP on tilaton protokolla  Palvelin ei säilytä tietoa saman asiakkaan tekemistä pyynnöistä, eikä yhdistä peräkkäisiä pyyntöjä toisiinsa  Malli soveltuu perinteiseen surffailuun, mutta web-sovelluksia on hankala tai mahdoton toteuttaa sarjana toisistaan riippumattomia sivuja

3 Tilattomuus, 2 • PHP-skriptin suorituksen päättyessä käytetyt muuttujat ‘katoavat’ • Toistaiseksi demoissa ongelma on kierretty välittämällä tarvittavat muuttujat sivulta toiselle GET-pyynnöissä (vrt. ‘seuraavat 5’). Ei kuitenkaan täysin ongelmaton käytäntö. Miksi? • Vastaus ongelmiin: HTTP-sessiot (istunnot)

4 Sessionhallinta PHP:lla • Ajatus  Loogisesti yhteenkuuluvat sivupyynnöt kuuluvat samaan istuntoon. Voidaan ylläpitää tietoa siitä, mitä pyyntöjä ja vastauksia asiakkaan ja palvelimen välillä on liikkunut  Loogisesti yhteenkuuluvat sivut muodostavat kokonaisuuden ja ovat tietoisia toistensa tekemisistä yhteisten muuttujien kautta  Muuttujat säilyvät istunnon keston ajan

5 Sessionhallinta PHP:lla, 2 • PHP:ssa istunto käynnistetään funktiolla session_start(), joka paitsi käynnistää session, myös luo satunnaisen tunnisteen (session ID) • Oletusarvoisesti tunniste tallennetaan asiakaspään cookieen  isunto täytyy käynnistää skriptissä ennen kuin selaimelle on lähetetty mitään. Miksi?

6 Sessionhallinta PHP:lla, 3 • Mikäli selain ei salli cookieiden käyttöä, tunniste siirretään sivulta toiselle GET:lla ja liitetään automaattisesti paikallisiin linkkeihin • Kun istunto on käynnistetty, voidaan skripteissä käyttää istuntomuuttujia, jotka säilyvät kunnes istunto päättyy (selain suljetaan tai istunto lopetetaan muulla tavoin) • Jotta skripti pääsee käsiksi istuntomuuttujiin, sen täytyy kutsua session_start(). Ei käynnistä uutta istuntoa, mikäli aktiivinen istunto löytyy

7 Sessionhallinta PHP:lla, 4 • Istuntomuuttuja voidaan asettaa kahdella tavalla: a)session_register(), jolle parametrina muuttujan nimi: session_register(“foo”) b)tai PHP  4.1: $_SESSION[“nimi”] = “arvo”  Käytettäessä a), muuttuja täytyy määritellä globaaliksi, mikäli sitä halutaan g:na käyttää  Käytettäessä a), muuttuja voidaan vapauttaa kutsumalla session_unregister()  Käytettäessä b), muuttuja on autom. globaali. $_SESSION on taulukko, joten muuttujan vapauttaminen esim. unset($_SESSION[“nimi”])

8 Sessionhallinta PHP:lla, 5 • Kaikki istuntomuuttujat voidaan vapauttaa kutsumalla session_unset() • session_destroy() lopettaa aktiivisen istunnon ja poistaa siihen liittyvän datan, poislukien globaalit muuttujat (ja istuntoon liittyvät cookiet): Tapa a) session_unset() session_destroy(); Tapa b) $_SESSION = array() session_destroy();

9 Sessionhallinta, cookiet • Cookie on (selaimen) muistiin tallentuva tekstitiedosto, jonne voidaan säilöä rajoitetunmittainen merkkijono • Istunto päättyy (ja mahdollinen tunnisteen tallentanut cookie poistetaan) automaattisesti kun selain suljetaan (kts. kalvo edellä: “Expires: at end of session”) • Muuttamalla expire -parametria, cookieita voidaan käyttää myös kun tietoa halutaan säilyttää istuntojen välillä. Miksi haluttaisiin?

10 Sessionhallinta, cookiet, 2 • Cookien asettaminen setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]]) jossa  name, cookien nimi ($_COOKIE[‘keksi’])  value, cookieen tallennettava arvo (saadaan $_COOKIE[‘keksi’] kautta)  expire, aika jolloin cookie vanhenee. Asetetaan unix timestampia käyttäen sekunteina, esim. time()+60*60*24*7; = 7 päivää. Mikäli arvoa ei aseteta, cookie on voimassa vain istunnon loppuun

11 Sessionhallinta, cookiet, 3  path, hakemistopolku palvelimella, jonka alla cookie on käytettävissä: esim. ‘/’ = koko domain; ‘/omat/’ = hakemisto ‘omat’ ja sen alihakemistot. Oletusarvona cookien asettaneen skriptin sijaintipolku  domain, domain ja alidomainit, joissa cookie on käytettävissä: esim. ‘.palvelin.fi’ = kaikki.palvelin.fi - päätteiset; ‘www.palvelin.fi’ = vain www -subdomain  secure, jos ‘1’, cookie asetetaan ainoastaan turvallisen yhteyden (esim. TSL tai SSL) yli. Mikäli cookie on jo asetettu, arvolla ‘1’ sen sisältöön päästään käsiksi vain turv. yhteyden kautta. Oletusarvo ‘0’

12 Sessionhallinta, cookiet, 4 • Esimerkkejä: $nimi = “Anna Malli” setcookie(“Nimi”, $nimi); setcookie(“Nimi”, $nimi, time+604800); /* time() palauttaa ajan kuluneina sekunteina 1.1.1970 00:00 GMT jälkeen. 60*60*24*7 = 604800 = viikko */ setcookie(“Nimi”, $nimi, time+604800, “”, “”, 1); /* sama kuin edellä, mutta käsittely vain HTTPS:n yli. Huom. tyhjät arvot parametreille, joita ei haluta määritellä */ setcookie(“Nimi”, $nimi, time+604800, “/~annamalli/”, “”, 1); /* sama kuin edellä ja käytössä ainoastaan Anna Mallin kotihakemistossa */ echo $_COOKIE[‘Nimi’]; // tulostaa: Anna Malli

13 Sessionhallinta, cookiet, 5 • Cookieen voidaan tallentaa ainoastaan merkkijono (string). Taulukkoja käytettäessä, voidaan käyttää serialize() funktiota, joka palauttaa taulukon tallennettavassa muodossa (string): $tiedot = array(“Nimi” => “Anna Malli”, “Osoite” => “Kotikatu 3”, “Puhelin” => “30304012”); echo serialize($tiedot); /* a:3:{s:4:"Nimi";s:10:"Anna Malli";s:6:"Osoite";s:10:"Kotikatu 3”; s:7:"Puhelin";s:8:"30304012";} */

14 Sessionhallinta, cookiet, 6 /* Tallennetaan cookieen taulukko */ setcookie(“Tiedot”, serialize($tiedot)); echo $_COOKIE[‘Tiedot’]; /* a:3:{s:4:\"Nimi\";s:10:\"AnnaMalli\";s:6:\"Osoite\";s:10:\"Kotikatu3\"; s:7:\"Puhelin\";s:8:\"30304012\";} */ /* Poistetaan automaattisesti lisätyt escape-merkit (\) lainausmerkkien edestä */ $tiedot_cookiesta = stripslashes($_COOKIE[‘Tiedot’]); /* Palautetaan taulukko ennalleen… */ $tiedot_cookiesta = unserialize($tiedot_cookiesta);


Lataa ppt "PHP ja sessionhallinta Verkkotekniikan jatkokurssi Kevät 2003 V. Seppänen"

Samankaltaiset esitykset


Iklan oleh Google