Sessiot
- Luentotaltiointi
- Mikä on sessio (istunto)?
- Evästeet PHP:ssa
- Miten sessiohallinta toteutetaan?
- Sessiot PHP:ssa
- Sessiot ilman evästeitä
- Sessiot ja XHTML
- Luentoesimerkki
- Lisätietoja
Tällä luennolla käsitellään PHP:n sessioita.
Luentotaltiointi
- sovellukset11.mp3 12M
- sovellukset11.wmv 26M
- sovellukset11_xvid.avi 75M
Mikä on sessio (istunto)?
Sessio on aika jonka käyttäjä viettää tietyn www-palvelun parissa.
Esim. selaa webbikaupan sivuja, lisää ostoksia ostoskoriinsa ja tekee tilauksen.
Tiettyyn rajaan asti tietoja voi kuljettaa mukana lomakkeelle asetettuina piilokenttinä.
Evästeet PHP:ssa
Session vaatimia tietoja ei voida tallentaa suoraan evästeisiin:
- Selain säilyttää vain 20 uusinta evästettä per domain
- Evästeen koko voi olla maksimissaan 4 kilotavua
- Käyttäjä pystyy muuttamaan evästeiden sisältöä
Miten sessiohallinta toteutetaan?
- Käyttäjän toimenpiteiden tulokset esim. valitut ostokset pitää tallentaa
- Jokainen HTTP-pyyntö pitää pystyä yksilöimään jotta tiedetään mikä kutsu liittyy mihinkin sessioon (istuntoon)
- Session olemassaololla pitää olla aikaraja koska WWW-palvelin ei voi tietää milloin käyttäjä on siirtynyt jollekin muulle sivustolle
Sessiot PHP:ssa

- Session muuttujat löytyvät $_SESSION-taulukosta
- Sessio voidaan tuhota session_destroy()-funktiolla
- Session avaimen saa session_id-funktiolla
- Sessio luodaan tai aktivoidaan session_start-funktiolla
Tämä funktiokutsu on löydyttävä aina php-ohjelman alusta (paitsi jos käytetään autostarttia).session_start();
Sessioiden oletusarvot
.htaccess-tiedostossa voi seuraavilla riveillä määrätä sessioihin liittyviä asetuksia:
# käynnistetään sessio automaattisesti ilman session_start()-funktiota
# Näin käytettynä ei voida tallentaa sessioon olioita!
php_value session.auto_start 1
# käytetäänkö cookieita vai ei
php_value session.use_cookies 1
# minne sessiot tallennetaan
# Ei tarvi normaalisti määritellä
php_value session.save_path '/home3/368/tjlahton/public_html/php/sessiot'
# kertoo montako sekunttia sessio pidetään elossa viimeisen sivukäynnin jälkeen
php_value session.gc_maxlifetime 1800
Sessiot ilman evästeitä
Jos evästeitä ei ole käytettävissä täytyy session tunnistetta kuljettaa mukana sivun osoitteessa parametrina tai lomakkeelle piilotettuna muuttujana.
Sessiotunnisteen kuljettaminen url:n mukana lisää tietoturvaongelmia koska tunniste voi kulkeutua sivun osoitteen mukana vääriin käsiin.
Sessiot saa toimimaan ilman evästeitä asettamalla:
php_value session.use_trans_sid 1 php_value url_rewriter.tags "a=href,area=href,frame=src,input=src,fieldset=fakeentry" php_value arg_separator.output &
Nämä saavat php:n lisäämään sessiotunnisteen lomakkeille ja linkkeihin. Itse luotuihin dynaamisiin linkkeihin php ei aina osaa lisätä sessiotunnistetta joten joskus pitää sessiotunniste lisätä seuraavasti:
print '<a href="' . $dynosoite . '?param=2&' . strip_tags(SID) . '">linkki</a>';
strip_tags(SID) ei palauta mitään jos sessiot toimivat
evästeillä strip_tags-funktiokutsu täytyy pitää mukana tietoturvasyistä.
Sessiot ja XHTML
PHP:n sessiohallinta käyttää joitakin käsittämättömiä oletusarvoja jotka täytyy muuttaa jos haluaa tuottaa validia XHTML:ää.
# Seuraavat huomiot koskevat vain url-pohjaista sessionhallinta.
# evästeiden kanssa näitä määrityksiä ei tarvita
# Käytetäänkö tarvittaessa url-pohjaista sessionhallintaa
php_value session.use_trans_sid 1
# mitä html-elementtejä kirjoitetaan uusiksi url-pohjaisessa sessionhallinnassa
# Tämä kohta on oletuksena php:ssa määriteltynä väärin
php_value url_rewriter.tags "a=href,area=href,frame=src,input=src,fieldset=fakeentry"
# url-parametrien erotinmerkki
# Tämä kohta on oletuksena php:ssa määriteltynä väärin
php_value arg_separator.output &
Ampersands, PHP Sessions and Valid HTML

