Ihan vain korjatakseni tai täydentääkseni BGT:n selitystä niin palvelin pystyy kyllä ylläpitämään sessiota ilman että pitää sortua kekseihin tai URLiin koodattuun tietoon. PHP:hen kuuluu mahdollisuus ihan oikeisiinkin sessioihin joissa tuollainen tiedo säilytetään puhtaasti palvelimella (PHP:n sessioiden yksityiskohtiin en kuitenkaan ole perehtynyt joten en tiedä onko "oikeiden sessioiden" käyttöönotossa jotain monimutkaista vai miksi ovat tuollaiseen ratkaisuun sortuneet.)
Tämä jäi aikoinaan vaivaamaan mieltäni sen verran, että huolimatta siitä miten aiheen vierestä tämä menee,

on pakko nyt vastata tähän. Siksikin, että ihmisillä ei olisi vääriä käsityksiä sessioista ja niiden vuoksi evästeitä vaativista järjestelmistä, kun evästeistä ei tavallinen ihminen tiedä juuri mitään muuta kuin että ilman niitä jotkut systeemit eivät toimi ja Gurut(tm) toteavat tällaiset systeemit pahuuden esikuviksi ja evästeet paholaisen joukkotuhoaseiksi.
Nyt olen itse töitten puolesta entisestänikin perehtynyt sessioihin ja mm. PHP:n ohjeiden (
http://www.php.net/manual/en/ref.session.php) pohjalta:
Yleinen käytäntöweppipalveluissa on, että käyttäjän kirjautuessa sisään hänelle annetaan sessioavain. (Vähän niinkuin ostarin parkkihalliin mennessä saadaan portilta semmoinen lippu-juttu, jossa on magneettiviiva.) Kun käyttäjä latailee weppipalvelun sivuja, hän näyttää aina tätä avainta, jolloin järjestelmä tietää, että kyseessä on tämä käyttäjä.
Muuta keinoa ei ole, koska A) http-yhteys katkaistaan aina, kun sivu on ladattu ja uutta sivua ladatessa avataan taas uusi yhteys ja B) http ei tarjoa tapaa kertoa, että kyseessä on nyt sama henkilö kuin äskenkin.
Http ei siis tarjoa keinoa edes tällaisen sessioavaimen välittämiseen, joten siihen on olemassa kaksi tapaa: 1) sisällyttää se sivun osoitteeseen (
http://blaa.fi/?sessioavain=123) tai 2) välittää se evästeessä.
Evästeiden etu ja ongelma on siinä, että ne ovat yleensä käyttäjälle näkymättömiä (ellei selaimessa ole muita asetuksia). Www-palvelin toimittaa selaimelle satsin evästeitä, joita selain sitten palauttaa palvelimelle, kun sieltä taas haetaan sivuja. Tämän tarkoitus nimenomaisesti on seurata käyttäjää. Etuina on mm. tapa kertoa järjestelmälle yllä mainittuun tapaan, että minä olen nyt se sama äskeinen käyttäjä, jolla on todellakin oikeus näihin tietoihin. Haittana on se, että plussa/1bonus -kanta-asiakaskorttien tapaan esimerkiksi Microsoft pystyy evästeiden avulla keräämään tilastoa siitä, mitä heidän sivujaan sinun koneeltasi selaillaan. Jos käyt siis katsomassa Mediaplayerin esittelysivua ja sitten jossain myöhemmässä vaiheessa lähetät Microsoftille palautetta jollain palautesivulla, syöttäen sinne sähköpostiosoitteesi, Microsoft saattaa lähettää sinulle Mediaplayer-mainoksia sähköpostissa, "kun kerran olet siitä kiinnostunut potentiaalinen asiakas."
Osoitteiden mukana välitetyissä sessioavaimissa taas on se ongelma, että olan yli kurkkijat voivat nähdä ne ja päästä hakkeroitumaan sinun tunnuksillasi järjestelmiin, joita käytät. Tällainen esimerkkihän oli tässä tapauksessa, kun Ronkainen leikkaa/liimasi selaimen osoitekentän linkkivinkkinä tänne. Kun tuota linkkiä seurasi samoihin aikoihin Ronkaisen ollessa yhteydessä Bookplussaan, Bookplussan järjestelmä luuli linkkiä seurannutta Ronkaiseksi.
Kyseessähän toki on huonosti suojattu järjestelmä. Yleensä näissä tapauksissa tarkistetaan, että kyseessä on aktiivinen sessioavain (auto on edelleen parkkihallissa, eikä sitä magneettilipuketta ole sörkätty siihen puominnostoautomaattiin) ja että avainta käytetään koko ajan samasta koneesta.
Ehkä juuri tätä Tero tarkoittikin, mutta se olisi väärinkäsitys, että web-järjestelmiin voisi kirjautua sisään ilman joko evästeitä tai osoitekentässä olevia sessioavaimia.
Ainoa poikkeus olisi java-appleteilla tai macromedia flashilla tms. toimivat sivut, mutta nämä eivät oikeastaan enää olekaan web-järjestelmiä, vaan web-selaimella käytettäviä sovelluksia.
Phuh. Nyt tämäkin pois sydämeltä.
