![]() |
|
||||||
|
|
| 09.09.10 / 16:01 |
|
Martin Rebane
NB! See on artikli uuendatud versioonMis ja milleks on sessioonid? Kui sa tead, mis asjad on cookied (kui ei tea, loe siit), siis sessioonide eesmärk on sama - kasutaja kohta infot salvestada. Erinevus küpsistega on aga selles, et kui küpsisete infot hoitakse kliendi arvutis, siis sessiooniinfot serveris ning kliendi käes on ainult sessiooni number, mille järgi teda ära tunda. Seda hoitakse kas cookiena(paigaldatakse automaatselt) või sessiooninumbrina URLi järel. Tehniline pool Sessioonide kasutamiseks on vajalik PHP neljas versioon. PHP3 kasutajad peavad kasutama PHPLIBi, kui sarnast asja soovivad. Nagu juba mainitud, kui sessioon algab, siis külastaja brauser ei hoia mitte muutujaid ja nende väärtusi(nagu cookiede puhul), vaid sessiooni numbrit. Kõik muutujad ja muud tegelased hoitakse serveris tekstifailina. Sessiooni lõpetamisel see fail kustutatakse. Sessioonid on kasulikud paljudeks asjadeks: e-poed, külastajate tuvastamised(login-logout süsteemid) või niisama mingi interaktiivse ja dünaamilise lehe tegemisel, kus on vaja hoida palju muutujaid. Konkreetne näide Tahame külastajale teada anda ntx seda, mitu korda ta meie lehte/lehti juba vaadanud on. PHP kood:
Proovi - pane see kood oma serverisse ja vajuta paar korda RELOAD nuppu - vaatamiste arv suureneb. Sessioonimuutujate registreerimine. Alles peale seda, kui oleme käivitanud sessiooni session_start() funktsiooniga, saame kasutada ja seada sessioonimuutujaid. PHP kood:
Vanemates PHP versioonides, kus register_globals oli vaikimisi peal, tuli sessioonimuutujate kasutamiseks need kõigepealt funktsiooni session_register() abil registreerida. Praegu seda teha ei tule. Turvalisus. Sessioonimuutujad on turvalised, kuna neid ei saa üle kirjutada, ntx kui meil on sessioonimuutuja $_SESSION['vaadatud'] = 4, siis kui keegi kavalpea kirjutab brauserisse urli: sess.php?vaadatud=5, siis see ei tööta, kuna sessioonimuutujaid ei saa väljastpoolt üle kirjutada. Probleem Mõned vanemad koodid, mis ei kasuta $_SESSION massiivi, vaid eeldavad register_globalsi=on seisundit, sisaldavad turvarisk, kui keegi on suvatsenud omal sessioonid ära keelata(seda siis näiteks cookiede keelamise näol). Juhul kui kasutaja sessioonicookiest keeldub, ei lähe automaatselt edasi ka sessioonimuutujad, kuna server ei suuda kasutajat enam tema sessiooniga kokku viia. Nüüd kui kasutaja kirjutab urliks: www.mina.ee/index.php?vaadatud=4, siis täpselt selline "sessioonimuutuja" ka kasutusse võetakse. Selle eeldus on muidugi see, et kasutaja peab ära arvama sessioonimuutuja nime. $_SESSION massiivis olevaid muutujaid niimoodi üle kirjutada ei saa, seega on alati soovitatav mitte kasutada register_globals poolt pakutavat võimalust. Sessioon ja kasutaja Enamasti toimib sessioon cookiede abil(kasutajale saadetakse cookie sessiooninumbriga). Kui kardad, et külastajal ei ole cookied lubatud ja ta ei saa sessiooni kasutada, siis anna sessiooni number edasi lingi kaudu: (seda võimalust saab ka automaatselt PHP konfist peale keerata). Kui ehitad sessioonide abil mingit süsteemi, mis salvestab tundlikke andmeid või võimaldab ligipääsu salajastele andmetele, siis on soovitav kasutada täiendavaid turvameetmeid sessioonide kaaperdamise vastu. Sest kui sul on nt sessioon numbriga 234234 ja keegi teine saab selle numbri teada ning sisestab index.php?PHPSESSID=234234 oma brauserisse, saab ta automaatselt su sessiooni kasutada. Elementaarseks rohuks selle vastu on salvestada sessioonimuutujasse kasutaja IP ja kui salvestatud IP ei klapi kasutaja omaga, on selge, et midagi võib olla viltu. Lõpp Kui soovid sessiooni hävitada, siis kutsu välja funktsioon session_destroy(). See funktsioon ei vaja argumente. Kood on siin: sess.txt .martin. Artikli kommentaarid Tänud ka Lauri Nõmmele artikli revideerimise eest. |
|