1 / 14

PHP ja sessionhallinta

PHP ja sessionhallinta. Verkkotekniikan jatkokurssi Kevät 2003 V. Seppänen (rissepp@cc.jyu.fi). Tilattomuus. HTTP on tilaton protokolla Palvelin ei säilytä tietoa saman asiakkaan tekemistä pyynnöistä, eikä yhdistä peräkkäisiä pyyntöjä toisiinsa

gyan
Download Presentation

PHP ja sessionhallinta

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 funktiollasession_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: • session_register(), jolle parametrina muuttujan nimi: session_register(“foo”) • 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 asettaminensetcookie ( 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);

More Related