Prosleđivanje vrednosti preko COOKIE i SESSION
Ovo je nastavak priče o prosleđivanju vrednosti PHP skriptovima. Za razliku od GET i POST koji nemaju svoj, da kažemo, životni vek, COOKIE I SESSION cookie ga imaju. I ovde kao i kod GET i POST postoje neka ograničenja u maksimalnoj količini podataka.
COOKIE
COOKIE ili kolačić u slobodnom prevodu, se čuva u vašem browseru, i za njega se definiše vreme čuvanja podataka.
COOKIE se koristi za čuvanje podataka na duže vreme. Ti podaci mogu biti podaci uneti u nekoj formi, recimo ako vaš sajt ima članove, lepo je ako zapamtite korisničko ime nekog člana i automatski mu popunite formu za logovanje prilikom sledećeg dolaska na sajt. Za čuvanje vrednosti u kolačićima se koristi funkcija setcookie, koju ćemo videti kako se koristi na sledećem primeru, kao i koje parametre ima:
setcookie('ime', 'pera', 2592000 + time(), '/');
- ‘ime’ – je ime promenljive, koju možemo pročitati preko $_COOKIE['ime']
- ‘pera’ – je vrednost koja će biti sačuvana
- treći parametar je vreme važenja ovog cookia, u gornjem primeru je to 30 dana izraženo u sekundama od momenta pozivanja skripte.
- ‘/’ – je putanja za koju važi cookie, kad se postavi ovako onda važi za ceo sajt, inače možete vezati cookie samo za neki direktorijum na vašem sajtu, ovo je zgodno ako imate više različitih skripti koje se nalaze u različitim direktorijumima, a koriste iste nazive promenljivih, tako izbegavate da se vrednosti prepisuju jedne preko drugih.
Ovo su najvažniji parametri koje ćete najviše koristiti, za više detalja pogledajte dokumentaciju za setcookie funkciju.
Još jedna bitna stvar vezana za cookie, je da su ograničeni na dužinu, a to je 4kb (4096 karaktera). U ovu dužinu računaju se i nazivi promenljivih, pomoćni podaci koji opisuju cookie, i sama vrednost. Jedan domen može imati maksimalno 20 cookia. Ovo za nekog ko počinje izgleda kao velika količina podataka, ali na velikim projektima, ovo postaje tesno pa se programeri dovijaju na razne načine (npr: skraćivanje naziva promenljivih).
Brisanje cookia se vrši tako što im stavite neko vreme u prošlosti, na primer ovako:
setcookie('ime', '', time()-86400);
Ovim ste browseru poslali cookie kojem je istekao rok trajanja, i on će ga automatski obrisati.
I za cookie važi isto upoyorenje kao i za GET i POST – pre bilo kakvog rada sa podacima, koji su došli iz spoljnjeg sveta, proverite ih!
SESSION
Session cookie, za razliku od običnog cookija, se čuva na serveru i čuva podatke od momenta kad pristupite stranici, i traje nekoliko minuta posle gašenja stranice. Da bi koristili session cookije, potrebno je na početku skripta pozvati funkciju session_start. Prilikom poziva ove funkcije u vašim cookijima se pojavljuje novi cookie sa imenom PHPSESSID u kojme se nalazi identifikaciona oznaka trenutne sesije, takođe se kreira odgovarajući fajl na serveru koji ima istu oznaku kao i sto je oznaka sesije.
Vrednosti se u session stavljaju prostim upisivanjem, kao što bi uradili i sa bilo kojim asocijativnim nizom.
session_start(); $_SESSION['username'] = 1;
Da bi pročitali dovoljno je napisati ovu promenljivu
echo 'Dobrodošli, '. $_SESSION['username'];
Kada budete rešili da zatvorite sesiju, i obrišete podatke koji su sačuvani na serveru treba pozvati funkciju session_destroy.
Ovo je sve što vam je potrebno da bi radili sa session cookijima. Kao što ste videli razlika između cookie i session cookie je u dugotrajnosti podataka, i drugo u javnosti tih podataka. Korisni nikad neće saznati podatke u session cookiju, osim ako ih vi ne prikažete, dok običan cookie je dostupan svakome na uvid i podložan je promeni od strane korisnika, jer svaki browser dozvoljava da se pregedaju cookiji.
Headers already sent….
Bitna stvar prilikom rada sa cookijima je da se sav upis mora obaviti pre bilo kakvog ispisa na ekran, isto važi i za session cookie, pa ih neću posebno naglašavati u ostatku teksta. Upis vrednosti u cookie nije teško izvesti u aplikacijama koje imaju razdvojenu kontrolnu logiku od prikaza. Ukoliko se desi neki ispis, pre upisa neke vrednosti u cookie, u browseru će se pojaviti ovakvo upozorenje:
Warning: Cannot modify header information - headers already sent by (....)
Pojavljivanje ovog upozorenja se može sprečititi ubacivanjem ob_start na početak skripta. Ova funkcija, jednostavno rečeno, zaustavlja slanje podataka browseru dok se skripta ne završi, ili do poziva funkcije ob_end_flush. Ovaj poziv je neophodan zato što podaci moraju da se upišu u cookie pre nego što krene ispis. Ovi podaci koji idu pre samog sadržaja stranice, nazivaju se zaglavlje (header), i njega ne vidite u browseru ali pored cookija tu idu još neki podaci koji opisuju samu stranicu.






