OPPITUNTI 20 Tilan tallentaminen istuntofunktioilla

Samankaltaiset tiedostot
OPPITUNTI 11 DBM-funktioiden käyttö

6. Funktiot 85. Kuinka funktioita määritellään ja kutsutaan. Kuinka funktioille viedään arvoja ja niistä palautetaan arvoja

OPPITUNTI 19 Tilan tallentaminen evästeiden ja kyselymerkkijonojen avulla

OPPITUNTI 3 Ensimmäinen skripti

OPPITUNTI 24 Esimerkki (Osa 2)

Taustaa. CGI-ohjelmointi

OPPITUNTI 21 Palvelinympäristö

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

OSA III PHP:n käyttö. Oppitunti

Päivitysohje Opus Dental

7. Taulukot 105. Kuinka taulukoiden tietoa käsitellään ja lajitellaan

OPPITUNTI 5 Ohjelman kulku

Google Cloud Print -opas

Julkinen. Suomen Pankin ja Finanssivalvonnan suojattu sähköposti: ulkoisen käyttäjän ohje

3.1 Mitä tarkoittaan heredoc? Milloin sitä kannattaa käyttää? Kirjoita esimerkki sen käyttämisestä.

8. Oliot 123. Kuinka luokkia luodaan ja olioita saadaan aikaan. Kuinka luodaan ja käsitellään ominaisuuksia ja metodeja

OPPITUNTI15 Päivämäärien käsittely

SQL Buddy JAMK Labranet Wiki

T Hypermediadokumentin laatiminen. Sisältö. Tavoitteet. Mitä on www-ohjelmointi? Arkkitehtuuri (yleisesti) Interaktiivisuuden keinot

Harjoitustyö: virtuaalikone

OSA I Aloitetaan. Oppitunti. 1. PHP: Kotisivusta portaaliin 2. PHP:n asentaminen 3. Ensimmäinen skriptisi. 17 Johdanto

Innocent drinks Cookie Policy

Vaihdoitko puhelinta? Yhteystietojen siirto Lumian, iphonen ja Androidin välillä käy näin

Written by Administrator Monday, 05 September :14 - Last Updated Thursday, 23 February :36

Edico Lite ja S Käyttöohje istunnon pitäjälle ja kutsutulle

Windows Server 2012 asentaminen ja käyttöönotto, Serverin pyörittämisen takia tarvitaan

Ohjelmoinnin perusteet Y Python

WWW-PALVELUN KÄYTTÖÖNOTTO LOUNEA OY

Tiedonsiirto helposti navetta-automaation ja tuotosseurannan välillä

Verkkojulkaiseminen Minna Väisänen. HTML5-tehtävä

Webpalvelin muistitikulle - Ohje

ICT1TN004. Lomakkeet. Heikki Hietala

Zeon PDF Driver Trial

Pedanet oppilaan ohje Aleksanteri Kenan koulu Eija Arvola

Lomake kannattaa asemoida taulukkoon: table. Silloin selitteet ja kentät saadaan sarakkeisiin. Kenttien ulkoasu voidaan määritellä tyyleillä.

EnterQ Johtamisportaali

SeaMonkey pikaopas - 1

Digitaalisen median tekniikat xhtml - jatkuu

Digitaalisen median tekniikat xhtml - jatkuu Harri Laine 1

Kangasniemen yrityshakemisto KÄYTTÖOHJE YRITTÄJÄLLE. KANGASNIEMEN KUNTA yrityshakemisto.kangasniemi.fi

OPPITUNTI 16 Tiedon käsittely

Ilmoitus saapuneesta turvasähköpostiviestistä

OPPITUNTI 10 Tiedostojen käsittely

Webforum. Version 14.3 uudet ominaisuudet. Viimeisin päivitys:

Luento 5. Timo Savola. 28. huhtikuuta 2006

Osa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 15: 16: int main() 17: {

Luottamuksellinen sähköposti Trafissa

Muistitikun liittäminen tietokoneeseen

Ohjelmoinnin perusteet Y Python

Olet tehnyt hyvän valinnan hankkiessasi kotimaisen StorageIT varmuuskopiointipalvelun.

OSA II Kieli. Oppitunti. 4. Rakennuslohkot 5. Ohjelman kulku 6. Funktiot 7. Taulukot 8. Oliot

Suvi Junes Tietohallinto / Opetusteknologiapalvelut 2012

Ohje luottamuksellista tietoa sisältävien sähköpostiviestien lähettämiseen ja vastaanottamiseen

LIITE A Vastaukset kysymyksiin

Luku 7 Uusien Mallien Tiedostot

Valintanauhan komennot Valintanauhan kussakin välilehdessä on ryhmiä ja kussakin ryhmässä on toisiinsa liittyviä komentoja.

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito

ohjeita kirjautumiseen ja käyttöön

Revu Kurssi: Merkkausten tallennus työkalulaatikkoon

FOTONETTI BOOK CREATOR

Sonera Viestintäpalvelu VIP VIP Laajennettu raportointi Ohje

Ylläpitoalue - Etusivu

Joomla pikaopas. Yksinkertainen opas, jossa neuvotaan esimerkkisivuston teko Joomla julkaisujärjestelmällä vaihe vaiheelta.

Webforum. Version 17.3 uudet ominaisuudet. Päivitetty:

McAfee epolicy Orchestrator Pre-Installation Auditor 2.0.0

ALCOVISOR. Käyttöohjeet FIN

SMART Board harjoituksia 17 - Notebook 10 Tiedostomuotoihin tallentaminen Yritä tehdä tehtävät sivulta 1 ilman että katsot vastauksia.

Julkinen. Suomen Pankin ja Finanssivalvonnan suojattu sähköposti: ulkoisen käyttäjän ohje

Käyttöohje Suomen Pankin DCS2-järjestelmään rekisteröityminen

TALLENNETAAN MUISTITIKULLE JA MUISTIKORTILLE

Automaattitilausten hallinta. Automaattitilauksien uudistettu käsittely

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

SSH Secure Shell & SSH File Transfer

VIENET JULKAISUJÄRJESTELMÄLLÄ TOTEUTETTUJEN INTERNET-SIVUJEN YLLÄPITO-OHJE

Kun tulostuksessa ilmenee muotoiluvirheitä

Ohjelman käyttöön ei sisälly muita kuluja kuin ohjelman lisenssimaksu ja mahdolliset webbipalvelusi käyttömaksut.

HAMINETTI WLAN LIITTYMÄN KÄYTTÖÖNOTTO-OHJE

Mainonnanhallinta Käyttöopastus. Tekniikka. Olli Erjanti Mediareaktori

Liitäntä AutoFuturista Koivunen Web Shopiin

Entiteetit erotetaan muusta tekstistä & ja puolipiste. esim. copyright-merkki näkyy sivulla

PHP tehtävä 3 Atte Pekarinen TIKT13A

Ohjelmoinnin perusteet Y Python

OPPITUNTI 12 MySQL-tietokannan käyttö

erasmartcardkortinlukijaohjelmiston

Sukupuu -ohjelma. Ossi Väre ( ) Joni Virtanen ( )

Tietokanta.java Luokka tarjoaa välineet tietokannan lukemiseen. Haetuista tiedoista muodostetaan kurssi- ja opetus-olioita.

Fixcom Webmail ohje. Allekirjoitus. Voit lisätä yhden tai useamman allekirjoituksen.

ORGANISAATION KIRJAUTUMINEN TURVASIRU.FI-PALVELUUN

Ohjelmoinnin perusteet Y Python

TAULUKKOLASKENTA. Älä tuhoa C-asemalla olevaa kansiota (säilytä varmuuskopiona). Käytettävät tiedostot. excel.xlsx. Case kuvaus

Palvelinpuolen ohjelmointi

T&M Autori Versio Series 60 -puhelimiin

Conversion Counter. Asennusopas

Erittäin nopea tapa saada kehitysympäristö php:lle pystyyn Voidaan asentaa muistitikulle

Solteq Tekso v Versiopäivitysohje.

Asko Ikävalko, k TP02S-D. Ohjelmointi (C-kieli) Projektityö. Työn valvoja: Olli Hämäläinen

Ohjelmoinnin jatkokurssi, kurssikoe

Transkriptio:

20. Tilan tallentaminen istuntofunktiolla 353 OPPITUNTI 20 Tilan tallentaminen istuntofunktioilla Edellisellä tunnilla tutkimme tilan tallentamista evästeiden ja kyselymerkkijonojen avulla. PHP4 on kuitenkin askeleen meitä edellä. PHP4:n myötä on mahdollista hallita käyttäjän istuntoja PHP:n sisäisillä funktioilla. Ne käyttävät samanlaisia tekniikoita kuin edellisellä jaksolla, jolloin tilan tallentaminen on yhtä helppoa kuin funktion kutsuminen. Tämän tunnin aiheita ovat: Mitä istuntomuuttujat ovat ja kuinka ne toimivat Kuinka istunto aloitetaan tai lopetetaan Kuinka muuttujia rekisteröidään istunnon yhteydessä Kuinka istunto tuhotaan Kuinka istuntomuuttujat otetaan pois käytöstä

354 20. Tilan tallentaminen istuntofunktiolla Mitä istuntofunktiot ovat? Istuntofunktiot toteuttavat jo aiemmin esillä olleen menettelyn. Tämä etu kuuluu tietyn uniikin tunnisteen käyttäjille; tuota tunnistetta voidaan sitten käyttää viittauksesta toiselle ottamaan esille tuohon ID-arvoon linkitetty informaatio. Erona on se, että suurin osa työstä on jo tehty puolestasi. Kun käyttäjä ottaa esille istuntokelpoisen sivun, hän voi allokoida uuden tunnisteen tai käyttää sitä tunnistetta, joka hänelle annettiin edellisen viittauksen yhteydessä. Kaikki istuntoon liittyvät globaalit muuttujat tulevat koodin käyttöön. Kumpaakin informaation pyynnöstä toiseen siirtämisen tekniikkaa, joita tutkittiin edellisellä tunnilla, tuetaan PHP4:n funktioiden toimesta. Evästeitä käytetään oletuksena, mutta voit varmistaa onnistumisen jokaisen käyttäjän suhteen koodaamalla istuntokohtaisen ID:n kaikkiin istuntokelpoisten sivujen linkkeihin. Istunnon tila tallennetaan tavallisesti tilapäistiedostoon, vaikka saatkin pian nähdä moduuleita, jotka tukevat suositumpia tietokantoja. Istunnon aloittaminen session_start()-funktiolla Istunto on aloitettava tai lopetettava ulkoisesti, ellet olet tehnyt muutoksia php.ini-tiedostoon. Oletuksena istunnot eivät käynnisty automaattisesti. Seuraava rivi löytyy php.ini-tiedostosta: session.auto_start = 0 Muuttamalla kohdan session.auto arvoksi 1 varmistetaan, että istunto alustetaaan jokaisen PHP-asiakirjan kohdalla. Jos et muuta tätä asetusta, sinun on kutsuttava itse session_start()-funktiota. Kun istunto on aloitettu, sinulla on pääsy käyttäjän istunnon ID:hen session_id()-funktion kautta; funktion avulla voidaan joko saada tai asettaa istunnon ID. Listaus 20.1 käynnistää istunnon ja tulostaa istunnon ID:n selaimelle. Listaus 20.1 Istunnon aloittaminen tai lopettaminen 1: <?php 2: session_start(); 3:?> 4: <html> 5: <head> 6: <title>listing 20.1 Starting or resuming a session</title> 7: </head> 8: <body> 9: <?php 10: print "<p>welcome, your session ID is ".session_id()."</p>\n\n"; 11:?>

20. Tilan tallentaminen istuntofunktiolla 355 12: </body> 13: </html> Kun skriptiä ajetaan ensimmäistä kertaa selaimelta käsin, generoidaan istunnon ID. Jos sivu ladataan myöhemmin uudelleen tai sivulle tullaan uudelleen, on sama istunnon ID käytössä. Tämä edellyttää tietenkin, että käyttäjän selain mahdollistaa evästeiden käytön. Jos tutkit listauksen 20.1 tuottamaa tulostusta, näet asetettavan evästeen otsikoista: HTTP/1.1 200 OK Date: Sun, 06 Feb 2000 13:50:36 GMT Server: Apache/1.3.9 (UNIX) PHP/4.0b3 Set-cookie: PHPSESSID=2638864e9216fee10fcb8a61db382909; path=/ Connection: close Content-Type: text/html Koska session_start() yrittää asettaa evästeen, kun istunto alustetaan ensimmäistä kertaa, on tärkeää kutsua sitä ennen kuin tulostat jotain muuta selaimelle. Tämä tarkoittaa sitä, että istunto pysyy nykyisenä istuntona niin kauan kuin selain on aktiivinen. Kun käyttäjä käynnistää selaimensa uudelleen, evästettä ei tallenneta. Voit muuttaa tätä käyttäytymistapaa muuttamalla php.ini-tiedoston session.cookie_lifetimearvoa. Se on oletuksena nolla, mutta arvoksi voidaan asettaa ajanjakso sekunneissa. Annettu arvo on päättymisajankohta jokaiselle istuntokohtaiselle evästeelle, joka lähetetään selaimelle. Istuntomuuttujien käyttö Uniikin tunnisteen liittäminen jokaiseen PHP-asiakirjaan on vain alkua PHP4:n funktioiden soveltamisessa. Voit rekisteröidä kuinka monta globaalia muuttujaa tahansa istunnon yhteydessä ja käsitellä niitä sitten jokaiselta isuntokelpoiselta sivulta käsin. Muuttuja rekisteröidään nykyisen istunnon yhteydessä session_register()-funktiolla. Funktio ottaa argumenteikseen merkkijonon, joka edustaa yhtä tai useampaa muuttujanimeä ja palauttaa arvon true, jos rekisteröinti onnistui. Argumentin syntaksi on epätavallinen siinä mielessä, että vain muuttujan nimi annetaan, ei siis itse muuttujaa. Listaus 20.2 rekisteröi kaksi istuntokohtaista muuttujaa. Listaus 20.2 Istuntokohtaisten muuttujien rekisteröinti 1: <?php 2: session_start(); 3:?> 4: <html> 5: <head>

356 20. Tilan tallentaminen istuntofunktiolla 6: <title>listing 20.2 Registering variables with a session</title> 7: </head> 8: <body> 9: <?php 10: session_register( "product1" ); 11: session_register( "product2" ); 12: $product1 = "Sonic Screwdriver"; 13: $product2 = "HAL 2000"; 14: print session_encode(); 15: print "The products have been registered"; 16:?> 17: </body> 18: </html> Listauksen 20.2 toiminta tulee esille vasta, kun käyttäjä siirtyy uudelle sivulle. Listaus 20.3 luo erillisen PHPskriptin, joka käsittelee listauksen 20.2 rekisteröimiä muuttujia. Listaus 20.3 Rekisteröityjen muuttujien käyttö 1: <?php 2: session_start(); 3:?> 4: <html> 5: <head> 6: <title>listing 20.3 Accessing registered variables</title> 7: </head> 8: <body> 9: <?php 10: print "Your chosen products are:\n\n"; 11: print "<ul><li>$product1\n<li>$product2\n</ul>\n"; 12:?> 13: </body> 14: </html>

20. Tilan tallentaminen istuntofunktiolla 357 Kuva 20.1 esittää listauksen 20.3 tulostuksen. Kuten voit nähdä, meillä on pääsy muuttujiin $product1 ja $product2 kokonaan uudelta sivulta. KUVA 20.1 Rekisteröityjen muuttujien käyttö. Kuinka tuo kaikki sitten toimii? PHP4 on kirjoittanut taustalla tietoa tilapäistiedostoon. Saat selville paikan funktiolla session_save_path(). Funktio ottaa argumentikseen valinnaisen hakemistopolun ja kirjoittaa sitten kaikki istuntotiedostot kyseiseen paikkaan. Jos et vie funktiolle mitään argumentteja, funktio palauttaa merkkijonon, joka edustaa kansiota, jonne tallentaminen nykyään tapahtuu. Omassa järjestelmässäni ohjelmalause print session_save_path(); tulostaa /tmp. Tuo /tmp-hakemisto sisältää seuraavanlaisia tiedostoja: sess_2638864e9216fee10fcb8a61db382909 sess_76cae8ac1231b11afa2c69935c11dd95 sess_bb50771a769c605ab77424d59c784ea0 Listauksen 20.1 ajaminen tuotti oman istuntokohtaisen tiedostonsa; kun avaan tuon tiedoston (nimi vastaa istunnon ID-arvoa), saan esille rekisteröidyt muuttujat: product1 s:17:"sonic Screwdriver";product2 s:8:"hal 2000"; Kun session_register()-funktiota kutsutaan, PHP kirjoittaa muuttujan nimen ja arvon tiedostoon. Sitä voidaan lukea ja muuttujat voidaan ottaa myöhemmin esille.

358 20. Tilan tallentaminen istuntofunktiolla Kun rekisteröit muuttujan session_register()-funktiolla, voit kuitenkin muuttaa sen arvoa milloin tahansa skriptin suorittamisen aikana ja tuo muutettu arvo näkyy myös istuntotiedostossa. Listauksen 20.2 esimerkki havainnollistaa muuttujien rekisteröintiin liittyvää prosessia. Prosessi ei kuitenkaan ole joustava. Olisi toivottavaa, että mikä tahansa määrä arvoja voitaisiin rekisteröidä. Käyttäjä voi esimerkiksi poimia tuotteita listasta ja voit sitten viedä tämän taulukkomuuttujan nimen session_register()-funktiolle, joka tallentaa ja koodaa tiedot puolestasi. Listaus 20.4 luo lomakkeen, jonka vaihtoehdoista käyttäjä voi valita tuotteita. Sinun tulisi sitten voida käyttää istuntomuuttujia ostoskorin luomiseen. Listaus 20.4 Taulukkomuuttujan rekisteröinti 1: <?php 2: session_start(); 3:?> 4: <html> 5: <head> 6: <title>listing 20.4 Registering an array variable with a session</title> 7: </head> 8: <body> 9: <h1>product Choice Page</h1> 10: <?php 11: if ( isset( $form_products ) ) 12: { 13: $products = $form_products; 14: session_register( "products" ); 15: print "<p>your products have been registered!</p>"; 16: } 17:?><p> 18: <form method="post"> 19: <select name="form_products[]" multiple size=3> 20: <option> Sonic Screwdriver 21: <option> Hal 2000 22: <option> Tardis 23: <option> ORAC 24: <option> Transporter bracelet 25: </select>

20. Tilan tallentaminen istuntofunktiolla 359 26: </p><p> 27: <input type="submit" value="choose"> 28: </form> 29: </p> 30: <a href="listing20.5.php">a content page</a> 31: </body> 32: </html> Olemme käynnistäneet istunnon session_start()-funktiolla. Näin meillä tulisi olla pääsy kaikkiin aiemmin asetettuihin istuntomuuttujiin. HTML-lomakkeessa asetetaan FORM-elementin ACTION-ominaisuudeksi nykyisen asiakirjan polku. Luomme sitten SELECT-elementin nimeltä form_products[], joka sisältää OPTION-elementtejä eri tuotteille. Muista, että HTML-lomakkeen elementtien, jotka sallivat usean kohteen valitsemisen, nimissä (NAME-ominaisuus) tulee olla hakasulkupari. Siten käyttäjän valinnat näkyvät taulukossa. PHP-koodilohkon sisällä testataan $form_products-taulukon olemassaolo. Jos muuttuja on läsnä, oletamme, että lomake on lähetetty. Sijoitamme tämän muuttujan toiseen muuttujaan, joka on nimeltään $products, ja rekisteröimme sitten sen session_register()-funktiolla. Emme rekisteröi suoraan $form_productsmuuttujaa, koska silloin syntyisi konflikti samannimisen POST-muuttujan kanssa, jos lomake lähetetään uudelleen. Sivun lopussa on linkki toiselle sivulle ja sen avulla voimme demonstroida käyttäjien valitsemiin tuotteisiin pääsyä. Luomme tämän uuden skriptin listauksessa 20.5. Listaus 20.5 Istuntomuuttujien käyttö 1: <?php 2: session_start(); 3: print session_encode(); 4:?> 5: <html> 6: <head> 7: <title>listing 20.5 Accessing session variables</title> 8: </head> 9: <body> 10: <h1>a Content Page</h1> 11: <?php 12: if ( isset( $products ) ) 13: { 14: print "<b>your cart:</b><ol>\n";

360 20. Tilan tallentaminen istuntofunktiolla 15: foreach ( $products as $p ) 16: print "<li>$p"; 17: print "</ol>"; 18: } 19:?> 20: <a href="listing20.4.php">back to product choice page</a> 21: </body> 22: </html> Käytämme taaskin session_start()-funktiota istunnon aloittamiseen. Testaamme sitten $productsmuuttujan olemassaolon. Jos muuttuja on olemassa, tulostamme taulukon alkiot (käyttäjän tekemät tuotevalinnat) selaimelle. Todellisessa ostoskoriohjelmassa voidaan pitää tuotetiedot tietokannassa ja testata käyttäjän syöttötiedot sen sijaan, että tallentaisimme ja tulostaisimme ne sokeasti. Listaukset 20.4 ja 20.5 demonstroivat kuitenkin sitä, kuinka helppoa on käyttää istuntofunktioita toisilla sivuilla olevien taulukkomuuttujien käsittelyyn. Istuntojen tuhoaminen ja muuttujien poistaminen Voit käyttää session_destroy()-muuttujaa lopettamaan istunnon, jolloin kaikki istuntomuuttujat tuhotaan. Funktio ei ota lainkaan argumentteja. Istunnon tulisi olla olemassa, jotta funktio toimisi. Seuraava koodi alustaa istunnon ja tuhoaa sen: session_start(); session_destroy(); Kun siirryt toisille istuntokelpoisille sivuille, ei tuhottu istunto ole enää niiden käytössä, jolloin sivujen on alustettava uudet istuntonsa. Kaikki rekisteröidyt muuttujat tuhotaan. Funktio ei kuitenkaan tuhoa rekisteröityjä muuttujia heti. Ne jäävät sen skriptin käyttöön, josta session_destroy()-funktiota kutsuttiin (ellei sivua ladata uudelleen). Seuraava koodi alustaa istunnon ja rekisteröi muuttujan nimeltä $test, jonka arvoksi asetetaan 5. Istunnon tuhoaminen ei tuhoa rekisteröityä muuttujaa. session_start(); session_register( "test" ); $test = 5; session_destroy(); print $test; // tulostaa 5

20. Tilan tallentaminen istuntofunktiolla 361 Kaikki istunnon rekisteröidyt muuttujat voidaan tuhota session_unset()-funktiolla. Se tuhoaa kaikki istuntoon liittyvät muuttujat sekä istuntotiedostosta että skriptistä. Funktio on väkevä työkalu; käytä sitä varoen. session_start(); session_register( "test" ); $test = 5; session_unset(); session_destroy(); print $test; // ei tulosta mitään, koska $test-muuttujaa ei enää ole Ennen istunnon tuhoamista kutsutaan session_unset()-funktiota, joka poistaa $test-muuttujan muistista ja pyyhkii pois rekisteröidyt istuntomuuttujat. Istunnon ID:n siirtäminen kyselymerkkijonossa Toistaiseksi olemme tukeutuneet evästeeseen tallentaaksemme istunnon ID:n skriptiviittauksesta toiseen. Tämä menettely ei yksistään ole luotettavin tapa tallentaa tila, koska et voi olla varma siitä, että selain hyväksyy evästeet. Voit kuitenkin lisätä varmuutta viemällä istunnon ID:n skriptiltä toiselle kyselymerkkijonon sisällä. PHP laittaa nimi/arvo-parit esille vakioon nimeltä SID, jos istunnon ID-arvoa vastaavaa evästettä ei löydy. Voit lisätä seuraavan merkkijonon mihin tahansa HTML-linkkiin istuntokelpoisilla sivuilla: <a href="anotherpage.html?<? print SID;?>">Another page</a> Linkkiteksti voisi näkyä selaimelle tällaisena: <a href="anotherpage.html?phpsessid=08ecedf79fe34561fa82591401a01da1">another A page</a> Istunnon ID, joka viedään tällä tavoin automaattisesti sivulta toiselle, tunnistetaan kohdesivulla, kun session_start()-funktiota kutsutaan ja sivulla on pääsy istuntomuuttujiin tavalliseen tapaan. Jos PHP4 käännettiin --enable-trans-sid-asetus päällä, havaitset, että tämä kyselymerkkijono lisätään automaattisesti jokaiseen linkkiin. Jos asetus ei ole päällä oletuksena, tekee SID-vakioiden lisääminen linkkeihin koodista siirrettävämpää.

362 20. Tilan tallentaminen istuntofunktiolla Istuntomuuttujien koodaaminen Olet jo nähnyt istuntotiedostoja tutkiessasi, kuinka PHP koodaa ja tallentaa istuntomuuttujia. Voit itse asiassa päästä käsiksi koodattuun merkkijonoon session_encode()-funktion avulla. Se voi olla hyödyllistä vianhaussa. Voit käyttää session_encode()-funktiota paljastaaksesi kaikkien istuntomuuttujien tilan: session_start(); print session_encode()."<br>"; // tulostusnäyte: products a:2:{i:0;s:8:"hal 2000";i:1;s:6:"Tardis";} Edellisen koodin näytetulostus näyttää tallennetut istuntomuuttujat. Voit käyttää tätä tietoa tarkistaaksesi, että muuttujat on rekisteröity ja päivitetty odotetulla tavalla. Funktio on hyödyllinen myös silloin, kun sinun tulee sijoittaa istuntomuuttujat tietokantaan tai tiedostoon. Kun olet siepannut koodatun merkkijonon, voit palauttaa alkuperäiset arvot session_decode()-funktiolla. Seuraava koodi esittelee tätä prosessia: session_start(); session_unset(); // ei pitäisi olla mitään istuntomuuttujia session_decode( "products a:2:{i:0;s:8:\"hal 2000\";i:1;s:6:\"Tardis\";}" ); foreach ( $products as $p ) { print "$p<br>\n"; } // Tulostus: // Hal 2000 // Tardis Käynnistämme istunnon tavalliseen tapaan. Varmistaaksemme, että aloitamme tyhjästä, käytämme session_unset()-funktiota kaikkien istuntomuuttujien tyhjentämiseen. Sitten viemme koodatun merkkijonon session_decode()-funktiolle. Sen sijaan, että funktio palauttaisi arvoja, se täyttää nimiavaruutemme sarjoittamattomilla muuttujilla. Vahvistamme sen käymällä $products-taulukon silmukassa läpi.

20. Tilan tallentaminen istuntofunktiolla 363 Istuntomuuttujan rekisteröinnin tarkistaminen Kuten olet jo nähnyt, voit testata rekisteröityjen muuttujien olemassaolon isset()-funktiolla. Voit testata kuitenkin ulkoisesti, että muuttuja on rekisteröity, käyttämällä apuna session_is_registered()-funktiota. Se ottaa argumentikseen merkkijonon, joka edustaa muuttujan nimeä ja palauttaa arvon true, jos muuttujaa ei ole rekisteröity. if ( session_is_registered ( "products" ) ) print "'products' is registered!"; Tämä on hyödyllistä, jos muuttujan lähde on varmistettava. Saatat haluta varmistaa, että testattava muuttuja on esillä istuntomuuttujana eikä GET-pyynnön mukana viedyn tiedon osasena. Yhteenveto Tällä tunnilla ja edellisellä tunnilla tutkimme eri tapoja tallentaa tila tilattoman protokollan yhteydessä. Kaikki metodit käyttävät evästeiden ja kyselymerkkijonojen yhdistelmää, johon joskus lisätään tietokantojen tai tiedostojen käyttö. Näillä lähestymistavoilla on omat etunsa ja haittansa. Eväste ei ole täysin luotettava eikä sen avulla voida tallentaa suuria määriä tietoa. Toisaalta se voi säilyä pitkänkin ajan. Lähestymistavat, jotka kirjoittava tietoa tiedostoon tai tietokantaan, ovat hieman hitaampia, mistä voi tulla ongelma suositulla sivustolla. Yksinkertainen ID voi kuitenkin erottaa runsaasti yksilöllistä tietoa kiintolevyltä. Kyselymerkkijono ei yleensä säily evästeen lailla. Se näyttää rumalta sijaintikentässä. Silti se voi siirtää suuren määrän tietoa pyynnöltä toiselle. Tekemäsi valinta riippuu projektistasi. Tällä tunnilla opit aloittamaan istunnon session_start()-funktiolla. Istunnon aikana voidaan rekisteröidä muuttujia session_register()-funktiolla, tarkistaa, että muuttuja on rekisteröity session_is_registered()- funktiolla ja poistaa kaikki rekisteröidyt muuttujat session_unset()-funktiolla. Voit tuhota istunnon session_destroy()-funktiolla. Varmistaaksesi, että mahdollisimman moni käyttäjä hyötyy istuntotuetusta ympäristöstä, voit käyttää SID-vakiota viedäksesi istunnon ID:n palvelimelle osana kyselymerkkijonoa. K&V K Liittyykö istuntofunktioihin joitakin sudenkuoppia, jotka olisi hyvä tietää? V Istuntofunktiot ovat yleensä luotettavia. Muista kuitenkin, että evästeitä ei voida lukea useiden domainien läpi, joten jos projektisi käyttää useampaa kuin yhtä domainnimeä samalla palvelimella (ehkäpä osana kaupallisen kaupankäynnin ympäristöä), kannattaa harkita evästeiden hylkäämistä asettamalla php.initiedoston session.use_cookies-asetuksen arvoksi nolla.

364 20. Tilan tallentaminen istuntofunktiolla Työpaja Työpaja tarjoaa joukon kertauskysymyksiä, joiden avulla voit tarkistaa, oletko ymmärtänyt materiaalin sisältöä. Yritä ymmärtää vastaukset ennen kuin jatkat seuraaviin lukuihin. Vastaukset ovat liitteessä A. Kysymyksiä 1. Mikä funktio voi käynnistää tai lopettaa istunnon? 2. Mikä funktio sisältää nykyisen istunnon ID:n? 3. Kuinka voit yhdistää muuttujan istuntoon? 4. Kuinka voit päättää istunnon ja tuhota kaikki jäljet siitä? 5. Kuinka voit tuhota istuntomuuttujat sekä nykyisestä skriptistä että istunnosta? 6. Mitä SID-vakio tekee? 7. Kuinka testaisit, onko muuttujaa nimeltä $test rekisteröity istunnon mukana? Toiminta 1. Edellisellä tunnilla loit skriptin, joka käyttää evästettä tai kyselymerkkijonoa tallentamaan käyttäjän asetukset sivulta toiselle. Jokainen ympäristön sivu voitiin esittää käyttäen käyttäjän määrittelemää taustaväriä ja käyttäjille voitiin esittää tervetulotoivotus nimen kera. Luo tuo skripti nyt uudelleen käyttämällä PHP4:n istuntofunktioita. 2. Luo skripti, joka käyttää istuntofunktioita muistamaan, millä sivuilla käyttäjä on jo käynyt. Anna käyttäjälle linkkiluettelo kullekin sivulle, jotta hän voi seurata helposti tekemisiään.