You are on page 1of 49

VISOKA TEHNIČKA ŠKOLA

NIŠ

DIPLOMSKI RAD
PHP Sesija
Predmet: Internet programiranje

Mentor: Student:
Mr Veličković Zoran Radivojević Milan
REr 58/06
PHP sesija

VISOKA TEHNIČKA ŠKOLA


NIŠ

DIPLOMSKI RAD

PHP sesija

Predmet: Internet programiranje

Mentor: Student:
Mr Veličković Zoran Radivojević Milan
REr 58/06
Članovi komisije:

1. _______________

2. _______________

-2-
PHP sesija

SADRŽAJ

UVOD............................................................................................................................................4

1. Protokoli računarskih mreža...................................................................................................6

1.1 OSI referentni model..........................................................................................................6

1.2 Mrežni protokoli…..…………………………………………….………………....…........7

1.3 HTTP protokol……………………………….……………………………………………...8

2. Programiranje na strani klijenta – HTML…………….…………………………...…….11

3. Programiranje na strani servera - PHP...............................……………………….……...14

3.1 Istorija PHP-a………………………………………………………………………...……..17

3.2 PHP komande korišćene pri izradi sesije…………………………………………….…....18

4. Kolačići (Cookies)………….................................…….………...……………...……..………19

5. Sesija (Session)………..……………………….................................…….…………...…….…26

6. Realizacija projekta…………………………………….……...………………………..........32

6.1 Projektni zadatak................................................................................................................32

6.2 Platforma za realizaciju projekta....................................................................................33

6.3 Struktura realizacijonog projekta...................................................................................34

6.3.1 Index........................................................................................................................35

6.2.2 Manage-check………...………......………….……………………………...........38

6.2.3 LoginSuccessfull.....................................................................................................40

6.2.4 AccessDenied...........................................................................................................42

6.2.5 Logout.php..............................................................................................................44

6.2.6 LogPage2.................................................................................................................45

6.2.7 Password..................................................................................................................47

7. Zaključak.....................................................................................................................................48

Literatura....................................................................................................................................49

-3-
PHP sesija

UVOD

Internet danas predstavlja nesumnjivo najveću čitaonicu na svetu, ogromnu bazu


podataka u kojoj se nalaze najrazličitiji sadržaji. Procenjuje se da trenutno ima oko dvesta
miliona računara koji imaju pristup internetu. Količina informacija koju ti računari poseduju je
ogromna. Jednom prilikom je objavljeno da, kada bi imao fizički - opipljiv oblik, sadržaj koji se
nalazi na internetu ne bi mogao da stane na teritoriju koju zauzima cela Evropa. Internet se vrlo
uspešno koristi u poslovne svrhe. U stvari, slobodno se može reći da se savremeno poslovanje ne
može zamisliti bez te ogromne baze podataka, isto kao što se ni život savremenog čoveka ne
može zamisliti bez mobilnog telefona i televizora. Gotovo sva preduzeća iz celog sveta
prezentuju svoje proizvode i usluge na internetu us pomoć svojih internet stranica. Zahvaljujući
tome preduzeće iz jedne zemlje vrlo lako i jednostavno može videti kompletnu ponudu usluga i
proizvoda preduzeća koje se nalazi na drugom kraju Zemljine kugle. Tako je uspostavljanje
kontakta sa poslovnim partnerima udaljenim na desetine hiljada kilometara značajno olakšano,
posebno kada se ima u vidu brzina elektronske pošte (tzv. E-mail od eng. electronic mail).
World Wide Web, ili jednostavno WWW najnoviji je informacioni servis na Internetu.
On se tek pojavio 1993. godine da bi danas sa više desetina miliona WWW stranica predstavljao
sinonim za Internet. Prve dve reči "World Wide" označavaju svetsku mrežu kompjutera, odnosno
da obuhvata čitavu planetu, to jest da je globalni sistem, a poslednja reč "Web" označava mrežu
(u orginalnom prevodu paukovu mrežu), odnosno elktronsku prezentaciju. Slobodnim prevodom
mogli bi reći da je World Wide Web grupa elektronskih prezentacija dostupnih na svetskoj
kompjuterskoj mreži - Internetu. Dobro je pomenuti i jednu skorašnju definiciju poznatkog
časopisa ".net" po kome je WWW sistem koji omogućava da stranice koje sadrze tekst, slike,
zvuk, animaciju i video zapis budu objavljene i pročitane od strane kompjutera povezanog na
Internet.
Web - elektronska prezentacija bazirana je na tehnologiji poznatoj kao hipertekst.
Hipertekst omogućuje da dokument linkovima bude povezan sa neograničenim brojem drugih
dokumenata koji mogu sadržati tekst, sliku, zvuk, video, ili bilo šta drugo na bilo kom drugom

-4-
PHP sesija

kompjuteru širom Interneta. Ova tehnologija praktično nam omogućuje da kliknuvši mišem na
link u jednom dokumentu dodjemo do nekog drugog dokumenta, i tako redom, bez obzira na
kom se, od više miliona kompjutera povezanih u svetsku kompjutersku mrežu, taj dokument
nalazi. Ulaskom u prvu WEB prezentaciju mi smo se nasli u cyberspace-u medju više desetina
miliona stranica teksta, slika, i drugih multimedijalnih sadržaja, bez obzira na kom se mestu na
zemaljskoj kugli oni nalaze. World Wide Web je danas najmoćniji i najfleksibilniji Internet
navigacioni sistem koji postoji.
Da bismo koristili WWW neophodno je da na svom računaru imamo instaliran softver za
čitanje WWW prezentacija. To danas nije nikakav problem jer se mnogi od ovih softverskih
alata dobijaju besplatno, mogu se besplatno preneti sa Interneta na naš računar. Najpoznatiji su
Microsoft Interenet Explorer, Opera, Mozilla Firefox ali postoje i mnogi drugi koji čitaju WWW
prezentacije sasvim uspešno.
Kako je broj WWW stranica ogroman, razumljiva je pojava sve većeg broja WWW
stranica koje upućuju na druge WWW stranice iz slične oblasti, odnosno pojava WWW stranica
koje u sebi sadrže alate za pretraživanje različitih baza podataka. To mogu biti baze podataka
dokumenata, elektronskih adresa, web-ova, itd. Ove WEB prezentacije kao sto su : Google,
Yahoo, itd. omogućuju zaista efikasno pretraživanje Interneta, i ne zahtevaju detaljno
upoznavanje sa principima i pravilima na osnovu kojih funkcionišu…

-5-
PHP sesija

1. Protokoli računarskih mreža

Protokol predstavlja skup pravila i konvencija za slanje informacija preko mreže.


Protokoli se mogu selektivno dodavati i uklanjati na svim mrežnim interfejsima na serveru.
Paketi informacija kreću se uz stek protokola, niz njega, kao i kroz medijume za prenos. Protokol
definiše format i redosled poruka koje se razmenjuju između dva ili više komunikacionih
entiteta, kao i akcije koje se preduzimaju prilikom predaje ili prijema poruke ili nekog drugog
događaja.

1.1 OSI referentni model

Open Systems Interconnection Reference Model je apstraktni opis dizajna protokola


komunikacijskih i računarskih mreža, predstavljen u obliku sedam slojeva.

1977. godine ISO organizacija (International Organization for Standardization) počela je


da se bavi razvojem arhitekture za komunikaciju (OSI) koja je kasnije postala internacionalni
standard. Open System Interconnection (OSI) referentni model objavljen je 1983. godine. (Day i
Zimmermann 1983.) Da bi 1985. godine bio prerađen. (Day 1995.) Inicijativa OSI modela imala
je za zadatak da omogući komunikaciju i interoperaciju između različitih kompjuterskih
arhitektura različitih proizvođača. OSI danas obuhvata na stotine standarda. Najpoznatiji detalj
OSI-a je sedam slojeva referentni model.

Slika 1.1 OSI referentni model

Komunikacija među procesima se odvija pomoću komunikacione mreže na koju su


računari povezani. ISO OSI je sedmoslojni referentni model koji opisuje komunikacionu
arhitekturu na Internetu.

-6-
PHP sesija

Slika 1.2 Međusobni odnos OPEN ISO i Internet referentnog modela

Internet arhitektura podrazumeva četiri nivoa protokola:

• Aplikativni nivo: Sadrži skup protokola definisanih različitim aplikacijama kako bi se


obezbedila tražena usluga
- FTP, SMTP, STTP, HTTP
• Transportni nivo: Obavlja komunikaciju između krajnjih komunikacionih tačaka
- TCP, UDP
• Internet nivo: Isporučuje i rutira datagrame između Internet čvorova
- Internet protocol (IP), Internet control message protocol (ICMP)
• Mrežni nivo: Host-specifična implementacija transmisije datagrama
- Ethernet (IEE802.3), point-to-point protocol(PPP)

1.2 Mrežni protokoli


Mrežni protokoli su specifikacija za standardizovane pakete podataka koji omogućavaju
deljenje informacija među mrežama. Svakom aktivnošću na Internetu koja podrazumeva
komunikaciju dva ili više udaljenih entiteta upravlja protokol. Na primer: protokoli u ruterima
određuju putanju paketa od njegovog izvora do odredišta, protokol za kontrolu zagušenja
saobraćaja u krajnjim sistemima kontroliše brzinu prenosa paketa između pošiljaoca i primaoca
itd. Ovladavanje oblašću umrežavanja računara praktično bi se moglo poistovetiti sa
razumevanjem svih aspekata mrežnih protokola.

-7-
PHP sesija

1.3 HTTP protokol

HTTP ili The Hypertext Transfer Protocol je komunikacioni protokol baziran na TCP/IP
protokolu koji se koristi da virtualno dostavi sve fajlove i druge podatke, kolektivno pozvane
resurse na internetu (World Wide Web). Ovi resursi mogu biti HTML fajlovi, slike, rezultati
upita ili bilo šta drugo. Browser (čitač) funkcioniše kao HTTP klijent zato što šalje zahtev HTTP
serveru koji se zove Web server. Onda Web server šalje odgovore nazad klijentu.

Slika 1.2 Način rada HTTP protokola

Standardni tj. default port koji osluškuje HTTP server je port 80 ali se može promeniti u
bilo koji drugi port.

-8-
PHP sesija

Postoje tri bitne karakteristike HTTP protokola koje trebamo imati u vidu:

- HTTP ne može biti trajno konektovan. Nako što se pošalje zahtev klijent se
diskonektuje (isključuje) sa servera i čeka na odgovor. Server mora ponovo da
uspostavi konekciju nakon sto obradi zahtev.
- HTTP je nezavistan od tipa podataka koje prenosi. Možemo poslati bilo koju
vrstu podataka koristeći HTTP protokol dokle god klijent i server znaju kako da
manipulišu njima.
- HTTP nema stanja: to je direktan rezultat toga što ne može biti trajno konektovan.
Server i klijent su svesni jedno drugog samo u toku transakcije. Nakon toga
zaboravljaju jedan na drugoga. Iz ovog razloga ni klijent ni server ne zadržavaju
informacije izmedju različitih zahteva tokom razmene podataka.

Dakle HTTP protokol ne pamti status posetioca, što znači da Web server, kada odgovori
na HTTP zahtev čitača, ne zna da li je postojao prethodni zahtev istog posetioca. Web server
šalje datoteke (Web stranice, grafiku i slično) čitaču Weba kao odgovor na HTTP zahtev čitača.
Prethodno pregledane stranice i međudejstvo sa objektima na Web stranici (kao sto su izbor ili
unos u elementima obrasca) nemaju nikakav uticaj na sadržaj svake nove preuzete stranice.

Međutim, ako imamo lokaciju sa pretplatom na koju se posetilac mora prijaviti da bi


pristupio nedostupnom ili namenskom sadrzaju, server mora voditi evidenciju o statusu
posetioca kao "prijavljenog" dok se on kreće kroz stranice na lokaciji. Inače, posetilac se mora
svaki put ponovo prijaviti dok se kreće od jedne stranice s ograničenim pristupom do druge.

U tome nam može pomoći programski jezik PHP i njegove aplikacije, prvenstveno
kolačići i sesije.

Kolačići i sesije omogućuju Web serveru da upravlja korisničkim podacima čuvajući


sledeće informacije:

- Parametre lokacije i stranica koje je korisnik izabrao prilikom prethodnih poseta


- Ključ koji povezuje posetioca sa podacima o njemu u bazi podataka lokacije
- Ključ sesije koji dozvoljava posetiocu da se jednom prijavi i ostane prijavljen dok
ne napusti lokaciju ili ne napusti čitač Weba

-9-
PHP sesija

- Izabrane proizvode u elektronskoj prodavnici, tako da mozemo prikazati izabrane


stavke u obrascu za narudžbu kada posetilac bude bio spreman da ih plati.

Dakle u ovom diplomskom radu interaktivno ću povezati nekoliko stranica uz pomoć


PHP-a kreirajući sesije i kolačiće. Ali pre nego što se upoznamo sa PHP - om ukratko ću
obijasniti HTML jezik za opis Web stranica koji je osnova za izradu internet stranica jer PHP
kao rezultat obrade podataka prosleđuje kod koji je pisan u HTML.

- 10 -
PHP sesija

2. Programiranje na strani klijenta - HTML

HTML (HyperText Markup Language, jezik za označavanje hiperteksta) je opisni jezik


specijalno namenjen opisu Web stranica. Pomoću njega se jednostavno mogu odvojiti elementi
kao što su naslovi, paragrafi, citati i slično. Pored toga u HTML standard su ugrađeni elementi
koji detaljnije opisuju sam dokument kao što su kratak opis dokumenta, ključne reči, podaci o
autoru i slično. Ovi podaci su opšte poznati kao meta podaci i jasno su odvojeni od sadržaja
dokumenta.

HTML nije programski jezik, nego jezik za označavanje teksta. Čitači Web-a ili Web
browseri su programi koji prevode HTML u Web dokumentima i prikazuju sadržaj na ekranu.
Najpopularniji web browser je Micrsoft Internet Explorer, ali se sve više koristi Firefox zbog
mnogo veće bezbednosti i udobnosti u radu. Web browseri imaju sposobnost da čitaju HTML
komande koje se zovu tagovi i interpretiraju ih na odredjeni način stvarajući sadržaj koji vidimo
dok krstarimo Internetom.

Ključ za razumevanje HTML-a je u odnosu između HTML-a i Weba. Web je jedno


ogromno more dokumenata - web stranica - koje su međusobno povezane tako da možete skakati
sa jedne na drugu. To znači da su web strane napisane u HTML-u, isto kako je pismo koje šaljete
prijatelju u Rim napisano na italijanskom jeziku. Očigledna razlika je u tome što je HTML
računarski jezik koji razumeju pretraživači Weba, a italijanski jezik koji razumeju ljudi u Italiji.
HTML je potreban na Webu za formiranje teksta i slika, kao i za izražavanje karaktera i ličnosti.
On nam omogućava da precizno prenesemo baš onakvu poruku kakvu želimo da pošaljemo u
svet.

Protokol pristupa čitaču nekoj web stranici na internetu vrši se na sledeći način. Unesemo
neku internet adresu i pritisnemo enter, čitač putem interneta zahteva određenu datoteku putem
Web servera. Po prijemu zahteva server nalazi tražene datoteke, sada čitač analizira sadržaj
primljene datoteke, generisanje dodatnih zahteva za datotekama sa servera i one mogu
predstavljati slike i i razne druge animacije nakon toga. Server šalje tražene dodatne datoteke,
analiza HTML koda i prikazivanje sadržaja na ekranu čitača.

- 11 -
PHP sesija

HTML dokument je datoteka u ASCII tekstualnom formatu, te za kreiranje HTML


dokumenta se može koristiti bilo koji tekst-editor.Datoteke sa dokumentom opisanim u HTML-u
obično imaju u svom imenu sufiks (ili ekstenziju) .html ili .htm.

HTML komande se pišu u vidu tzv. TAG-ova. Jedan tag je ustvari komanda koja govori
vašem browseru šta i kako da uradi tj. na koji način da prikaže sadržaj vaše stranice. HTML
tagovi su "case insensitive" tj. svejedno je da li ih pišete malim ili velikim slovima. Tagovi se
pišu unutar oznaka "<" i ">" (bez znakova navoda) npr: <html>. Ovaj tag se nalazi na početku
svakog HTML dokumenta i on govori vašem browseru da je fajl koji je upravo počeo da učitava
baš HTML dokument i da kao takvog treba i da ga prikaže. Na kraj HTML dokumenta se stavlja
završni HTML tag:</html>. Ovaj tag govori vašem browseru da je to kraj vašeg HTML
dokumenta. Većina tagova ima i početni i završni tag. Završni tag se dobija dodavanjem znaka
"/" i označava mesto na kojem prestaje dejstvo početnog taga. Postoje i tagovi kod kojih ne
morate da stavljate završni tag kao što je recimo tag <br> koji služi za prelazak u novi red.

Svaki HTML dokument se sastoji od dva dela: zaglavlja (engl. head) i tela (engl. body).
Zaglavlje se odvaja tagovima <head> i </head> a telo dokumenta tagovima: <body> i </body>.
Sve ono što napišete u zaglavlju dokumenta neće se prikazati u prozoru vašeg browsera već
obično služi samo da pruži neke informacije o vašoj stranici. Tako ćete u okviru vašeg zaglavlja
svakako staviti tagove: <title> i </title> između kojih ćete staviti naslov vaše stranice. Ali pazite,
to nije naslov koji će se pojaviti u telu vaše stranice već onaj naslov koji se pojavljuje u
naslovnoj liniji vašeg browsera. I on izgleda ovako:

<title> Uvod u HTML </title>

S druge strane sve ono što napišete između tagova <body> i </body> predstavljaće telo
našeg dokumenta i pojaviće se kao sadržaj naše prezentacije u prozoru browsera. Dakle, svaki
HTML dokument mora da ima sledeći "kostur":

- 12 -
PHP sesija

<html>

<head>

<title>Naslov dokumenta</title>

</head>

<body>

Ovde unesite sve sto zelite da se vidi u vasoj prezentaciji

</body>

</html>

Tagovi se mogu pisati velikim ili malim slovima ili kombinovano. Program za pregled
sadržaja HTML dokumenta (npr. lynx, Opera, Mozilla, NN, IE,...) ignoriše razliku malih i
velikih slova u nazivima tagova. Takođe se ne uzima u obzir ni postojanje višestrukih praznih
redova (za prelaz u novi red koristite tag <BR>, a ne taster Enter), blanko, tabulator,...

Osnov HTML predstavljaju tagovi i atributi. Pomoću tagova se određeni deo dokumenta
odvaja od ostatka i na njega se primenjuju pravila definisana samim tagom. Atributi se nalaze
unutar tagova i omogućavaju da se pored samog imena taga i unapred definisanog ponašanja još
bliže odredi način prikaza i ponašanja označenog dela dokumenta.

<font color=”blue” face=”verdana” font size=”10”>

Ovo HTML pravilo obuhvata:

- Crnom bojom obeležene HTML naredbe

- Crvenom bojom obeležena imena atributa

- Plavom bojom obeležene vrednosti atributa

HTML je ralativno lak za upotrebu (pravljenje web prezentacija) ali nije najbolji. Pored
njega postoje mnogi drugi napredni jezici kao što su: Kaskadni Opisi Stilova-CSS, Java Script,
PHP-Serverski Skript Jezik, XHTML, XML i drugi jezici. Na narednim primerima ću vam
pokazati neke od mogućnosti PHP-a.

- 13 -
PHP sesija

3. Programiranje na strani servera - PHP

PHP je alat koji omogućava da Web stranice pravimo u vreme izvršavanja. U prošlosti,
Web lokacije su se sastojale od statičnih stranca sa tekstom, grafikom i, možda, svetlucavim (ali
nepromenljivim) multimedijalnim efektima i animacijama. Danas, posetioci očekuju lokacije
koje im omogućuju da smeštaju podatke u bazu podataka i dobijaju ih upitom, kao i da formiraju
novi Web sadržaj zasnovan na zahtevima postavljenim tokom korišćenja resursa lokacije. PHP
(skraćenica od Personal Home Page alati) je hipertekstualni pretprocesor koji omogućava
generisanje sadržaja Web stranice u vreme izvršavanja. Iskaze koje izvrsava PHP procesor
možete staviti u posebnu datoteku ili ugraditi u HTML Web stranice.

Slika 3.1 pokazuje korake kojima se preuzimaju i prikazuju PHP Web stranice. Kada
čitač Weba zatraži PHP Web stranicu (datoteku s nastavkom, obično .php, povezanu sa PHP
procesorom), Web server šalje zahtev PHP procesoru. Procesor čita dokument koji čitač želi da
preuzme. Dok prolazi kroz datoteku, red po red, PHP procesor izvršava PHP iskaze obuhvaćene
oznakama za početak «?php ili <?) i završetak (?>) PHP skripta. Procesor ispisuje izlaz generisan
PHP iskazima koje izvršava, kao i sam tekst izvan početne i završne PHP oznake, na Web
stranicu (virtuelnu, u memoriji Web servera) koju Web server na kraju šalje čitaču Weba.

Pošto PHP procesor generiše HTML Web stranice nakon što čitač Weba pošalje zahtev
serveru za Web stranicu, možemo generisati stranice sa HTML-om specifičnim za čitač i stranice
koje prikazuju različit sadržaj zavisno od toga ko je posetilac ili koje je doba dana. Ukratko, PHP
omogućava da pretvorite Web lokaciju od zbirke statičnih Web stranica koje posetioci mogu da
gledaju, u aplikaciju koja se pokreće na Web serveru sa korisničkim okruženjem Web stranice.

Pretpostavimo da na Web stranici želite da prikažete trenutno vreme. Ako stranicu


programiramo statički (korišćenjem samo standardnog HTML-a), ceo dan ćete provesti u
ažuriranju Web stranice (jednom u minuti) da bi svaki posetilac video tačno vreme.

- 14 -
PHP sesija

Slika 3.1 Obrada PHP Web stranice

1) Čitač Weba šalje Web serveru HTTP zahtev za PHP Web stranicu.

2) Web sever prosleđuje zahtev za Web stranicu PHP sintaksnom analizatoru.

3) PHP sintaksni analizator pronalazi i preuzima PHP Web stranicu (datoteku s nastavkom .php).

4) PHP sintaksni analizator izvršava PHP iskaze u PHP dokumentu i formiraWeb stranicu od
izvršenih iskaza i HTML-a koje pronađe u datoteci.

5) PHP sintaksni analizator prosleđuje novu Web stranicu Web serveru.

6) Web server šalje čitaču Weba stranicu koju je generisao PHP sintaksni analizator.

Umetanjem PHP iskaza koji dinamički ispisuje tekuće vreme na Web stranici pošto čitač
Weba zatraži stranicu, PHP procesor automatski ažurira vreme na stranici. Nakon prijema
zahteva za PHP Web stranicu, procesor formira stranicu sa sadržajem bez PHP iskaza (statičnu
stranicu) od datoteke Web stranice na disku i umeće tekuće vreme dobijeno ugrađenom PHP
funkcijom date()

- 15 -
PHP sesija

Dok se klijentski script jezici (kao što je JavaScript) izvršavaju u čitaču Weba, PHP je
serverski jezik, što znači da program na Web serveru (a ne čitač Weba) izvršava PHP skript
ugrađen u HTML kod Web stranice.

Tehnički rečeno, PHP je međuplatformski, serverski skript jezik, ugrađen u jezik za


označavanje, što znači:

- Bez izmena možete izvršavati PHP kod na Web serverima koji rade pod različitim
operativnim sistemima kao sto su Linux, Mac OS, RISC OS, Unix i Windows.
- PHP iskaze ugrađujete u dokument Web stranice ili samostalno ili uporedo sa HTML,
XHTML ili XML oznakama kojima definišete stranicu za čitač Weba.
- Kada čitač Weba zatraži Web stranicu s ugrađenim PHP iskazima, server šalje zahtev
PHP procesoru. Procesor pronalazi traženu datoteku i izvršava ugrađeni PHP kod u njoj,
PHP iskaze zamenjuje izlazom (ako postoji) i prosleđuje rezultat Web serveru. Web
server, zatim, stranicu koju je vratio PHP procesor prosleđuje čitaču Weba.

Elegancija PHP-a je u tome što čitač Weba nikad ne radi sa PHP-om ugradjenim u Web
stranicu. Za razliku od JavaScripta, VB Scripta, JScripta ili drugih klijentskih script jezika, kada
pišete PHP skript, ne morate brinuti da li čitač Weba posetioca podržava PHP. Da biste napravili
Web stranicu sa PHP-om, ugradite PHP komande koje želite da izvršite u HTML Web stranice i
dajte dokumentu Web stranice nastavak (kao sto je .php) da biste je povezali s PHP procesorom.

- 16 -
PHP sesija

3.1 Istorija PHP-a

Pregledom kratke istorije PHP-a, vidi se kako je poreklo jezika uticalo na njegovu
trenutnu upotrebu. Godine 1994, Rasmus Lerdorf je napisao nekoliko Perl skriptova da bi
utvrdio ko je posećivao njegovu Web stranicu. Vremenom, sve više i više programera se
zanimalo za njegove skriptove, i on ih u proleće 1995. objavljuje kao paket, pod nazivom
Personal Home Page alati - otuda skraćenica PHP. Početni skup PHP alata, koji je Lerdorf
označio kao “CGI omotač napisan u PerIu", sadržao je nekoliko serverskih makroa i jednostavne
uslužne programe, kao što su brojač poseta i knjiga gostiju.
Zbog rastućeg interesovanja za njegove PerI skriptove, Lerdorf je preradio svoj program
za sintaksnu analizu i ugradio alat za sintaksnu analizu podataka sa HTML obrazaca, nazvan
Form Interpreter (FI), te dodao podršku za mSQL bazu podataka. Kombinovani paket, objavljen
sredinom 1995, nazvan je PHP/FI ili PHP2. Ubrzo nakon toga, Web dizajneri su počeli da
koriste te alate za obavljanje još složenijih zadataka. PHP-ova politika "otvorenog koda"
omogućila je grupi programera predvođenoj Zeevom Suraskim i Andijem Gutmansom da
ponovo prerade PHP procesor 1997. godine. Kod, koji su objavili postaje osnova za PHP3 (PHP
verzije 3), koji je brzo usvojen na više od 1.000.000 Web lokacija pre drugih serverskih skript
jezika kao što su Microsoftove aktivne serverske stranice (ASP) i Allaireov ColdFusion.
Verzija PHP4 dostupna je besplatno (na različitim Web lokacijama, uključujući
http://www.PHPnet), kao i otvoreni izvorni kod, što znači da možemo preuzeti izvorni kod PHP
procesora i "pogledati ispod haube". Medutim, to što je besplatan i otvorenog koda, nije glavni
razlog što se PHP danas koristi na više od 6.000.000 domena.
On je postao serverski skript jezik za mnoge Web servere zbog sledećih razloga:
• PHP radi pod Windowsom NT ili Unixom, što olakšava izradu složenih Web lokacija za
obe platforme.
• Ima jednostavnu, a ipak elegantnu objektno orijentisanu sintaksu i odličnu dokumentaciju
(dostupnu u knjigama razIičitih autora i, besplatno, na Mrezi). Osim toga, struktura PHP-
a je bliska programerima koji su koristili proceduralne ili objektno orijentisane
programske jezike. Prema tome, ako znamo C, C++, Javu, Pascal ili Visual Basic, lako
ćemo naučiti da pišemo PHP skriptove i funkcije – nećemo se osećati kao da učimo
potpuno nov programski jezik.

- 17 -
PHP sesija

• PHP je prilagodjen Web dizajneru tako što mu omogućava da obavi zadatak sa nekoliko
poziva funkcije (umetnutih u HTML Web stranice). Na drugim skript jezicima, za isti
posao neophodno je veliko znanje i glomazan kod.
• PHP je veoma brz. Za razliku od ASP-a, koji usporava Internet informacioni server (IIS)
kada odjednom analizira sintaksu mnogo složenih ASP stranica, mozete prevesti,
optimizovati, i uskladištiti PHP skriptove u memoriju - omogućujući time Web serveru
da opsluži veliki broj PHP Web stranica bez primetnog pogoršanja izvršavanja.

3.2 PHP komande korišćene pri izradi sesije

U ovom poglavlju obijasniću neke od osnovnih komandi u PHP–u koje ću koristiti pri
izradi mog diplomskog rada:

• <?PHP ?> - Ovim komandama mi ukazujemo PHP serveru da se u tekstu unutar njih
nalaze PHP iskazi. Ove komande možemo da shvatimo kao granice koje ceo PHP
program drže na okupu
• Setcookie – ova komanda se koristi za kreiranje kolačića
• $_COOKIE[‘ime kolačića’] – ovom komandom mi možemo pročitati sadržinu kolačića
• echo – komanda koja štampa na Web stranicu ono što se nalazi nakon te komande
• isset() – komadna koja proverava da li je data promenljiva već setovana
• session start() - funkcija koja proverava da li sesija već postoji (tj da li postoji sessionID
na korisnikovom računaru), ako ne postoji ona kreira novu sesiju.
• Fopen - funkcija koja ukazuje da dati fajl treba da se otvori
• trim – komanda koja uklanja prazan prostor (ili neki drugi simbol) od samog početka do
kraja tekstualnog fajla
• feof – proverava da li je kraj fajla na mestu gde se nalazi pokazivač
• split – komanda koja će razdvojiti string u znakovni niz iz datog izraza
• fgets – uzima liniju na koju ukazuje pokazivač
• $_POST[ime promenljive]- komanda koja preuzima promenljivu poslatu metodom POST
• $_SESSION[ime] - kreiranje sesijske promenljive
• fclose - komanda koja zatvara fajl
• @session_unset()–funkcija kojom oslobađamo sve promenljive sesije (one ostaju prazne)

- 18 -
PHP sesija

4. Izrada kolačići (Cookies)

Postoje razni načini kako da se interaktivno povežemo sa korisnikom tj njegovim


browser-om (čitačem). Jedan od najzastupljenijih je uz pomoć COOKIES-a. Prva važna stvar
kod kolačića je da pri kreiranju moraju da se podese tj postave na određene vrednosti..
Podešavanje kolačića mora imati sledeću sintaksu:

setcookie($name, $value, $expire);

Kao što sam već rekao da bismo uopšte kreirali i podesili kolačić moramo da koristimo
php funkciju SETCOOKIE, u tu funkciju moramo da unesemo tri argumenta: ime kolačića
$name, njegovu vrednost $value i vreme trajanja tj. isteka kolačića $expire.. Taj kod izgleda
ovako:

</HTML>
<HEAD> <TITLE> Kolačići </TITLE> </HEAD>
<BODY>
<?php
setcookie (‘test’, 45, time() + (60*60*24*7));
?>
</BODY>
</HTML>

Kao što sam već pomenuo u prethodnom delu teksta da bi smo kreirali kolačić moramo
koristiti funkciju setcookie koja treba da sadrži tri atributa: ime kolačića koji sam ja u ovom
slučaju stavio da je test a pošto je string, stavljen je pod navodnicima, zatim unosimo vrednost
kolačića za koju sam ja u ovom slučaju stavio da je broj 45 (inače to može da bude i string), a
kao zadnji argument upisujemo vreme trajanja kolačića. Taj argument se unosi početnom
funkcijom time() koja predstavlja trenutak kad se kolačić kreira tj. trenutak kada se taj skript
izvršava na zahtev korisnikovog čitača i šalje na korisnikov računar. Nakon funkcije time()
unosimo koliko će taj kolačić trajati na korisnikovom računaru od trenutka nastajanja kolačića i
to vreme može biti od par sekundi pa na više. Naravno nema svrhe kreirati kolačić koji će trajati

- 19 -
PHP sesija

par sekundi jer onda gubimo smisao postojanja kolačića. Zato sam ja u datom primeru postavio
da on traje 7 dana.
Postoje dva načina postavljanja vremena pošto se vreme trajanja upisuje u sekundama:
- jedan od načina je da preračunamo koliko ukupno sekundi imamo u sedam dana i da tu
konkretnu vrednost upišemo nakon znaka plus;
- drugi u praksi primenjeniji način je da nam računar to sam proračuna. To radimo tako što
nakon znaka plus pišemo koliko sekundi sadrži jedan minut pa to množimo sa koliko minuta
sadrži jedan sat pa to dalje množimo sa koliko sati ima jedan dan i na kraju množimo sa koliko
dana ima jedan nedelja i to na kraju izgleda ovako :

Time()+(60*60*24*7)

Znak + ima ulogu da na trenutno vreme (tj.vreme izvršenja skripta) doda taj odredjeni broj
sekundi..
Ako sada pokrenem ovu stranicu, kucajući adresu gde se data stranica nalazi i njen naziv
http://localhost/Cookies.php čitač će prikazati totalno praznu stranicu jer ja inače nisam ubacio
nikakvu sadržinu u telo HTML-a ali učitavanjem ove stranice u čitač je ubačen kolačić.
Svaki čitač ima mogućnost prikaza kolačića koji su zapamćeni u njemu pa ću tako ja u operi,
čitaču koji koristim demonstrirati prikaz kolačića koji sam upravo dobio učitavanjem ove
stranice.

Slici 4.1 Put do molačića u korisnikovom čitaču

- 20 -
PHP sesija

Klikom na Tools a zatim Preferences dobijamo prozor na kome se nalazi dugme “Manage
Cookies…” koji nam nudi mogućnost da vidimo sve kolačiće i upravljamo njima.

Slika 4.2 Kolačić sačuvan u korisnikovom čitaču

Klikom na tu opciju dolazim do prozora (slika 4.2) u kome su mi prikazane sve lokacije
sa kojih sam primio kolačiće koji se nalaze u mom čitaču. Klikom na localhost dolazim do
kolačića koji je upamćen učitavanjem moje prazne stranice. Vidi se njegova lokacija na serveru,
njegovo ime “test” i njegova vrednost koja je 45. Kao što sam već pomenuo njegova vrednost ne
mora da bude broj, može biti string ili neki drugi tip podatka zavisno od njegove namene...
Sada kad sam kreirao kolačić bilo koji korisnik računara može da udje u čitač i pristupi
vrednosti tog kolačića. Većini korisnika to nije bitno ali postoji mogućnost da neki haker dodje
do tih podataka i pokuša da iskoristi te podatke ,da ukrade identitet korisnika na našem sajtu ili
napravi neku veću štetu. Zato postoje neke naprednije metode kriptovanja koje se koriste pri
izradi kolačića koje su malo sigurnije.
Sada cu obijasniti kako mogu da testiram i učitavam vrednost već postojećeg kolačića.
Prvo treba kreirati promenljivu $var1 kojoj dajemo vrednost kolačića čije je ime test (vrednost
iz prethodnog primera) zatim ćemo odštampati u čitaču vrednost te promenljive:

- 21 -
PHP sesija

</HTML>
<HEAD> <TITLE> Čitanje vrednosti kolačića </TITLE> </HEAD>
<BODY>
<?php
$var1=$_COOKIE[‘test’];
echo=$var1;
?>
</BODY>
</HTML>

Ako pokrenemo ovu stranicu u gornjem levom uglu biće odštampana vrednost kolačića
45 ( slika 4.3 )

Slika 4.3 Štampanje vrednosti kolačića

Desilo se sledeće, server je primio zahtev za stranicom cookies_read ,počeo da čita kod i
kad je došao do $_COOKIE poslao je zahtev čitaču i rekao pošalji mi kolačić za ovaj domen jer
će mi trebati vrednost kolačića test. Zatim uzima vrednost test-a i dodeljuje ga promenljivoj

- 22 -
PHP sesija

$var1 i zatim ga štampamo pomoću komande echo. To je sve što se tiče testiranja i učitavanja
kolačića nazad na server.
Naravno ako hoćemo da se otarasimo tj. da obrišemo neki kolačić to mozemo da
izvedemo tako što ćemo njegovu vrednost da postavimo na 0 ili da postavimo da je vreme
trajanja datog kolačića isteklo.. Taj kod bi izgledao ovako:

</HTML>
<HEAD> <TITLE> Čitanje vrednosti kolačića </TITLE> </HEAD>
<BODY>
<?php
$var1=$_COOKIE[‘test’];
echo=$var1;
?>
<?php
//Ovo će obrisati kolačić
Setcookie ( ‘test’, 0, time() - (60*60*24*7));
?>
</BODY>
</HTML>

Ovo će vrednost kolačića postaviti na 0 (tj nešto bez značajno) i njegovo vreme trajanja
postaviti na neko vreme pre nego što smo uopšte kreirali kolačić (zbog znaka – koji oduzima
toliko sekundi koliko smo postavili).
Kada bi pokrenuli ovu stranicu, prvi put bismo dobili ponovo odštampanu vrednost
kolačića koja je bila 45 jer smo u strani namestili da prvo pročita i odštampa vrednost pa tek
onda da obriše kolačić. Ali svakim sledećim učitavanjem stranice dobićemo obaveštenje da nije
nadjen kolačić sa tim imenom jer smo ga ukinuli (Slika 5.4)

- 23 -
PHP sesija

Slika 4.4 Prijava greške, kolačić “test” ne postoji

Naravno, ne možemo uvek da se oslanjamo na to da će kolačići uvek biti tu. Korisnici


imaji neku kontrolu nad kolačićima u njihovom računaru, mogu da ih izbirišu da im promene
vrednosti tako da kada ih ponovo učitavamo hoćemo da budemo pažljivi oko toga šta to
učitavamo, da so to u stvari validni podaci koji postoje. U datoj stranici vidimo da naš čitač
upozorio da je neidentifikovan index i to definitivno ne želimo da se dešava na našoj aplikaciji.

- 24 -
PHP sesija

Dakle kad god čitamo podatke iz kolačića dobro je dodati sledeći kod:

</HTML>
<HEAD> <TITLE> Testiranje i brisanje kolačića </TITLE> </HEAD>
<BODY>
<?php
$var1=0;
if(isset(=$_COOKIE[‘test’])){
$var1=$_COOKIE[‘test’];}
echo=$var1;
?>
<?php
//Ovo će obrisati kolačić
setcookie ( ‘test’, 0, time() - (60*60*24*7));?>
</BODY>
</HTML>

Dakle, dobro je napisati kod gde ćemo pitati ako “if“ je kolačić podešen „isset()“.Ako je
kolačić podešen if(isset($_COOKIE[‘test’])) onda ćemo koristiti promenljivu $var1. Moramo i
promenljivu $var1 još na početku da definišemo da ima neku default vrednost inače ako kolačić
ne postoji dobili bismo grešku da $var1 nema vrednost.. Kada ovu stranicu učitamo dobićemo
odštampanu vrednost 0.
Ključna stvar je da su kolačići jako zgodni za postavljanje podataka na računar korisnika
koje možemo da iskoristimo kasnije. Ako se vrate na naš sajt za mesec dana, za godinu dana, ako
je kolačić još uvek tu možemo da pokupimo te informnacije i znamo nešto o tom korisniku ali ne
možemo baš da budemo sigurni da će kolačići biti tu, zato treba da proverimo da li su oni tu pre
nego što im dopustimo da učestvuju u našoj aplikaciji. Zato što ti podaci nisu tako pouzdani, i
kao što sam već pokazao mi možemo da vidimo sadržaj kolačića kao korisnici pa čak možemo i
promeniti taj sadržaj u kolačiću trebalo bi da se sagleda i jedna druga vrsta kolačića koja će nam
da ti dosta više opcija i malo veću sigurnost koja se zove sesije „Session”.

- 25 -
PHP sesija

5. Izrada Sesije (Session)

Sada kad znamo kako funkcionišu kolačići, koje su njihove prednosti i mane, kada znamo
kako njihov sadržaj može biti izgubljen ili izmenjen mogli bismo probati nešto malo robusnije
posebno ako bismo radili na nekoj zahtevnijoj Web aplikaciji. Kolačići u tom slučaju možda i
nisu najbolje rešenje za nas. Mada najčešće ćemo želeti da radimo u kombinaciji sa kolačićima i
sesijama ali po nekad će nam zgodnije biti da ubacimo samo kolačić jer će on verovatno trajati
duže nego sesija, s druge strane u nekim situacijama je bolje koristiti sesije jer im možemo im
više verovati pošto su sigurnije.
Sesija je fajl koji se čuva na WEB serveru i u tom fajlu mi možemo čuvati kakve god
informacije želimo. Tako, da u njima možemo da smestimo mnogo više informacija nego u
kolačiću i to je jedna prednost ali način na koji mi proveravamo koji fajl pripada kom korisniku
je uz korišćenje kolačića. Dakle, u korisnički čitač smestimo specijalni kolačić tipa session a
onda pogledamo u taj kolačić da nađemo mesto gde se fajl nalazi na našem serveru a onda
možemo pogledati u taj fajl da bismo našli informaciju smeštenu u sesiji. Ta informacija nije
vidljiva s korisničke strane niti im je omogućeno da je prepravljaju, jedino što oni mogu da urade
je da promene ID number tj broj u kolačiću koji je referenca na fajl.. Ali taj ID number će biti
jako dug i komplikovan da bi smo sprečili da neki korisnik otme sesiju drugom korisniku.
Dakle da bi smo bili u mogućnosti da kreiramo sesiju moramo prvo da kreiramo taj fajl i
postavimo kolačić na korisnikovom računaru ili ako smo to već uradili onda ćemo trebati da
nađemo taj kolačić i da nađemo odgovarajući fajl na serveru.
To možemo uraditi funkcijom SESSION_START(). To je jako prosta funkcija koju mi
možemo da pozovemo, ali moramo biti jako obazrivi jer ta funkcija mora da se nađe na samom
početku stranice. Znači, mora da bude postavljena pre bilo kakvog koda HTML, XML ili nekog
drugog da bi funkcionisala..U suprotnom sesija nam neće biti u funkciji.
Kao što sam napomenuo, startovanje sesije ili session_start() mora da se desi pre bilo kog
koda, jer kad jednom ubacimo html, head, title onda je već kasno, onda ne možemo pokrenuti
sesiju, ne možemo komunicirati sa čitačem o njegovim kolačićima koji moramo da uradimo da
bi startovali sesiju.

- 26 -
PHP sesija

<?php
session_start();
?>
</HTML>
<HEAD> <TITLE> Startovanje sesije </TITLE> </HEAD>
<BODY>

</BODY>
</HTML>

Ta jedna komanda će reći “u redu php idi u korisnikov browser (čitač) i nađi ID number
(identifikacioni broj) za ovaj sesioni kolačić, vrati se, nađi taj fajl i otvori ga da bi smo mi mogli
da ga koristimo, i ako odeš i ne uspeš da nađeš taj ID number ili se vratiš i ne nađeš taj sesioni
fajl onda kreiraj novi i pošalji korisniku odgovarajući kolačić i uradi sve što je potrebno da bi
mogao da startuješ ovu sesiju“ . Znači session_start() će uraditi sve što je neophodno da bi ta
sesija proradila.
Kada bi pokrenuli ovu stranicu ne bi se prikazalo ništa, samo prazna stranica ali možemo
da vidimo šta se desilo ako odemo na Tools, Preferences pa zatim na “Manage Cookies…” i na
kraju na localhost i pogledamo u kolačiće kao smo radili i ranije videćemo nešto što se zove
PHPSESSID. To je ime kolačića i to ime možemo i mi sami da konfigurišemo u php.ini fajlu na
serveru a sadržaj tog kolačića je “ise7a7be22” (slika 5.1)….

- 27 -
PHP sesija

Slika 5.1 ID broj u kolačiću na korisnikovom računaru

Dakle to je ID number ili polje koje će php start da koristi da bi ga uporedio sa fajlom na
našem serveru. Naravno da neko može da pokuša da promeni taj broj i da proba da se poveže na
stranicu kao drugi korisnik i da isprobava razne kombinacije dok ne nađe da je to sesija, ali ovaj
je previše dug i komplikovan string da bi neko uspeo to da uradi. Tu ima dovoljno varijacija da
bi nekom trebalo stvarno puno vremena da nađe drugi fajl na našem sistemu (serveru), drugu
sesiju, koja bi odgovorila na te probane varijacije. Naravno ako mislimo da pravimo neki veliki
industrijski sajt sa milionima posetilaca onda možemo razmišljati o drugim sigurnosnim
opcijama ali za neke neke normale svrhe sesija će nam omogućiti da možemo da referenciramo
na neki jedinstven fajl. Trenutno je taj fajl prazan ali možemo staviti u njega ili izvučemo
podatke iz njega referencirajući na njega kao što referenciramo na super globalne promenljive
GET, POST i COOKIE. Dakle kreiramo promenljivu $_SESSION i onda joj damo ime i
vrednost kao na sledećem primeru i na taj način zapamtimo podatke u sesiju. A onda možemo
da ubacimo još jedan PHP blok koji će da pročita te vrednosti nazad.

- 28 -
PHP sesija

<?php
Session_start();
?>
</HTML>
<HEAD> <TITLE> Učitavanje i štampa vrednosti sesije </TITLE>
</HEAD>
<BODY>
<?php
$_SESSION[‘name’]=”Milan”;
?>
<?php
$name = $_SESSION[‘name’];
echo $name;
?>
</BODY>
</HTML>

Kao što se vidi iz koda jedini način da on sazna za ime jeste da uspešno skoči sa “Milan”
na “$_SESSION[name]” sa “$_SESSION[name]” na promenljivu “$_name” a onda ime bude
odštampano na stranici.
Kada odštampamo stranicu dobijamo podatak koji smo zapamtili u sesiji što je u ovom
slučaju ime “Milan” (slika 5.2)

- 29 -
PHP sesija

Slika 5.2 Izgled odštampanog sadržaja sesije

Dakle tako smeštamo podatke u sesiju i izvlačimo po potrebi, u ovom slučaju da bi smo
ih štampali. Tu možemo smestiti puno vrednosti, npr. ovde možemo dodati još jedno ime tako
što ćemo uraditi nešto slično kao u prethodnom slučaju. U prvom php bloku možemo dodati i
prezime a onda u drugom bloku spojiti ta dva podatka i odštampati ih zajedno uz pomoć
komande echo (Slika 5.3).

<?php
Session_start();
?>
</HTML> <HEAD> <TITLE> sesija </TITLE> </HEAD>
<BODY>
<?php
$_SESSION[‘ime’]=”Milan”;
$_SESSION[‘prezime’]=”Radivojević”;
?>
<?php
$puno_ime = $_SESSION[‘ime’].””.$_SESSION[‘prezime’];
echo $puno_ime;
?>
</BODY>
</HTML>

- 30 -
PHP sesija

Kad pokrenemo tu stranicu rezultat je:

Slika 5.3 Odštampani sadržaj dve sesije

Kada bismo ponovo otišli da vidimo kolačiće i dalje bismo videli samo onaj ID fajl kao i
prethodno. Ne bismo našli ništa od ovih informacija jer se to čuva na našem serveru gde jedino
mi možemo da im pristupimo.

- 31 -
PHP sesija

6. Realizacija projekta

6.1 Projektni zadatak

Zadatak mog diplomskog rada je da napravim internet sajt čijoj će sadržini moći da
pristupe samo korisnici sa odgovarajućim korisničkim imenom i password-om. Koristeći sesiju
treba da omogućim korisniku nesmetan prelazak sa stranice na stranicu u okviru sajta a da taj
korisnik ne mora svaki put iznova da se prijavljuje. Korisnika koji želi da poseti sajt treba
preusmeriti na difoltnu internet stranicu (na mom serveru), index.php na kojoj treba uneti
username i password. Ukoliko unesene vrednosti budu tačne trebam mu odobriti pristup i drugim
stranicama i njegov username treba biti odštampan na internet stranici. Dakle, kada se korisnik
jednom prijavi (uloguje) na moju Web lokaciju trebam mu omogućiti da se on može kretati dalje
nesmetano kroz ostatak stranica sajta a da server sve vreme bude svestan da je to taj isti korisnik,
s toga korisnik neće morati da se prijavljuje iznova na svaku stranicu lokacije.
Jedna od stvari koje moja aplikacija treba da obezbedi je da korisnik ne mora svaki put
nakon povratka na sajt da unosi svoj username i password već da mu oni budu automatski
ponuđeni u formi. A ako žele, da mogu imati opciju da se odjave sa sajta da bi neki drugi
korisnik mogao da se uloguje sa istog računara.
U slučaju da korisnik ne unese odgovarajuće korisničko ime i password, ne treba mu biti
omogućena poseta daljem sadržaju sajta već mu treba biti prikazano obaveštenje da mu nije
dozvoljen pristup datoj lokaciji.

- 32 -
PHP sesija

6.2 Platforma za realizaciju projekta

Da bismo počeli sa radom u PHP-u moramo da ispunimo par uslova. Prvo šta treba da
posedujemo je Web server, i to će nam poslužiti da možemo da koristimo Web fajlove koje ćemo
gledati u našem čitaču. To ću instalirati na mom računaru, ne na nekom posebnom hardveru na
nekoj drugoj lokaciji. Nema nikakvih problema da se Web server pokrene na bilo kojoj desktop
mašini i takođe da imamo čitač Web stranica koji će se nalaziti isto na našem računaru i koji će
moći da čita stranice sa tog Web servera. Takođe će nam trebati PHP server, da bi naš Web
server razumeo PHP fajlove koje ću kreirati i servirati ih čitaču. Biće nam potreban i tekst editor
da bismo mogli da kreiramo te PHP fajlove tj. da napišemo naš kod. I na kraju će nam naravno
trebati Web čitač koji će nam prikazivati stranice koje budemo kreirali. Dakle PHP nakon obrade
fajla PHP prosleđuje HTML čitaču tako da možemo koristiti bilo koji čitač koji čita HTML kod.

Ono što ću ja koristiti je:


• Web server - Apache 2.2.11,
• PHP server, verzija 5.2.9,
• Tekst editor - Komodo Edit 5,
• Web Čitač - Opera

Ono što ću uraditi je da ću instalirati sve ove aplikacije, pokrenuti ih na lokalnoj mašini,
kreirati PHP fajlove i na kraju ih pokrenuti u mom čitaču.
Postoje dva načina instalacije ovih aplikacija. Jedno je da odemo na sajtove httpd.apache.org
i www.php.net i skinemo Apache i PHP instalacije i instaliramo ih jedan po jedan ili ćemo otići
na sajt www.wampserver.com/en/index.php i skinuti paket “sve u jednom”. Ono što ću ja
koristiti je WAMP, skraćenica od Windows, Apache , MYSQL i PHP. Ovo je danas najučestaliji
način instalacije ovih servisa, jer dobijamo gotov paket svih servisa koji nam trebaju sa već
podešenim servisima.

- 33 -
PHP sesija

6. 3 Struktura realizacijonog projekta

Moja aplikacija se sastoji iz šest PHP skriptova i jednog tekstualnog fajla. Nazivi skriptova
su sledeći:

- Index.php
- Manage-check.php
- LoginSuccessfull.php
- AccessDenied.php
- Logout.php
- LogPage2.php
- Password.txt

Prvi skript (Web stranica) koji korisnik vidi nakon pristupanja Web lokaciji jeste script
index. U njemu se nalazi forma koja sadrži dva polja. Jedno je za unos imena korisnika a druga
je za unos password-a. Ukoliko korisnik ne unese validne podatke neće mu biti dozvoljen pristup
ostalim stranicama na mojoj lokaciji. Podaci koje on unese u formu na index stranici biće
prosleđeni skriptu Manage-check koja će unešene vrednosti uporediti sa vrednostima koje su
unesene u tekstualni fajl password. Ukoliko je korisnik uneo prave podatke biće mu automatski
prosleđena stranica LoginSeccessfull a preko linka će moći da poseti i drugu korisničku stranicu
LogPage2. U gornjem delu ovih stranica biće odštampano korisničko ime posetioca. Dakle, moja
lokacija će prepoznati dok korisnik prelazi sa jedne na drugu stranicu, da je reč o istom
korisniku.
Ukoliko kojim slučajem korisnik ne unese ispravno korisničko ime i password biće
prosleđen na stranicu AccessDenied i neće mu biti omogućen pristup ostalim stranicama.
Logout script može pokrenuti korisnik koji se nalazi na bilo kojoj od dve stranice
namenjene uspešno ulogovanim korisnicima i njegova uloga je da odjavi korisnika sa sajta (da
obriše podatke iz sesije i kolačića) tako da se sa istog računara može ulogovati drugi korisnik.
U narednim poglavljima svaki od ovih skriptova biće razmatran ponaosob.

- 34 -
PHP sesija

6.3.1 Index

Ovo je prvi script (internet stranica) kojoj se pristupa pri kucanju Web lokacije (Web adrese)
localhost/ tj. adrese servera na mom računaru. U ovom skriptu se nalazi forma čiji izgled je dat
na slici 6.2.1. (nakon što je pročita čitač).

Slika 6.3.1 Izgled index skripta

Ono što ova forma radi jeste da prihvata username i password korisnika i prosleđuje ih
metodom POST do skripte manage-check.php i to je realizovano sledećim kodom:

- 35 -
PHP sesija

<html>
<head><title> Niste ulogovani </title></head>
<body bgcolor="#888888">
<table width="740" border="0" align="center" cellpadding="0"
cellspacing="0">
<tr><img src="crna.jpg">
<td width="3" bgcolor="000000"></td>
<td width="8" bgcolor="#dddddd"></td>
<td bgcolor="dddddd">
<form name="form" method="post" action="manage-check.php">
<fieldset>
<legend>Member Login:</legend> <dl>
<dt> <label for="myusername">Username:</label> </dt>
<dd><input name="myusername" type="text" id="myusername"
value="<?PHP if (isset($_COOKIE['username']))
{ echo $_COOKIE['username']; }
else { echo "";} ?>
"/> </dd>
<dt><label for="mypassword">Password:</label></dt>
<dd>
<input name="mypassword" type="password" id="mypassword"
value="<?PHP if (isset($_COOKIE['password']))
{ echo $_COOKIE['password']; }
else { echo "";} ?>
"/> </dd>
<dt><input type="submit" name="Submit" value="Login"/></dt>
</dl>
</fieldset>
</form>
<td width="3" bgcolor="#000000">&nbsp;</td>
</tr></table>
<center><img src="crna.jpg"></center>
</body>
</html>

- 36 -
PHP sesija

Kod obeležen crnom bojom predstavlja HTML koji sam ja postavio kao osnovu stranice.
Tu sam koristeći tabelu dekorisao stranicu. Podesio boju pozadine, ubacio sliku sa tačno
definisanom veličinom koja će mi pomoći da se ova internet stranca u svakom čitaču interpretira
na isti način bez obzira da li koristimo Firefox, Operu ili bilo koji drugi čitač.
Srž ovog koda je kod forme. Taj kod je obeležen plavom bojom i njim sam napravio
formu u koju korisnik unosi tražene podatke. Ime ove forme je “form”, motoda kojom se uneseni
podaci prosleđuju je “POST” a ti podaci se prosleđuju skriptu Menage-check.php.
Kao vrednost polja za username postavio sam PHP blok u kome sam postavio uslov,
ukoliko na korisnikovom računaru postoji kolačić koji je sa moje Web lokacije i nosi ime
“username” uneti njegovu vrednost u polje, ukoliko taj kolačić ne postoji ne unositi nikakvu
vrednost u polje.
Gotovo identičan PHP blok nalazi se u delu vrednosti za polje password gde sam umesto
kolačića pod imenom “username“ postavio uslov da potraži ukoliko postoji kolačić pod imenom
password a onda ukoliko on postoji da se njegova vrednost unese u polje za “password“.
Naravno ako taj kolačić ne postoji ovaj PHP blok neće raditi ništa. Tako se korisniku pruža
mogućnost da ne mora mora svaki put da unosi svoje podatke već da su njegovu podaci već
uneseni i njegovo je samo da pritisne dugme LogIn.
Ti kolačići koji se nalaze na korisnikovom računaru mogu se obrisati tako što korisnik
pre napuštanja lokacije na stranici izabere opciju „odjavi se“.

- 37 -
PHP sesija

6.3.2 Manage-check

Manage-check.php je najbitniji skript na celoj Web lokaciji. U njemu se proverava


identitet korisnika, kreiraju sesija i kolačići i odobrava ili zabranjuje pristup ostalim stranicama
na toj Web lokaciji. To je script koji prihvata vrednosti username i password poslate od strane
index skripte i upoređuje ih sa vrednostima koje se nalaze u fajlu password.txt. Ovaj skript
realizovan je na sledeći način:

<?php
session_start();
if($fp=fopen("c:wamp\www\password.txt", "r"))
{ $found=false;
while(!feof($fp))
{
$line=trim(fgets($fp,1000));
$userPass=split(",",$line);
if(($userPass[0]==$_POST['myusername'])and
($userPass[1]==$_POST['mypassword']))
{
$found=true;
$_SESSION["username"]=$_POST['myusername'];
setcookie('username',$_POST['myusername'],time()+86400,'/');
setcookie('password',$_POST['mypassword'],time()+86400,'/');
header("location: LoginSuccessfull.php");
}
}
if (!$found) {
header("location: AccessDenied.php");
}
fclose($fp);
}
?>

- 38 -
PHP sesija

Prva komanda u ovom skriptu je funkcija session_start(). Ta funkcija će uraditi sledeće,


otići će do korisnikovog čitača i potražiti ID number (identifikacioni broj) za ovaj sesioni
kolačić, zatim će se vratiti, naći taj fajl i otvoriti ga da bi smo mi mogli da ga koristimo. Ukoliko
ne uspe da nađe taj ID number na korisnikovom računaru ili taj sesioni fajl na serveru onda će
kreirati novu sesiju i poslati korisniku odgovarajući kolačić.
U sledećem bloku funkcija (obeležen zelenom bojom) ukazuje se PHP procesoru da fajl
na određenoj adresi treba da otvori i pročita.
U bloku komandi označenih crnom bojom PHP procesor prolazi kroz sadržinu datog fajla
i preverava da li je pokazivač došao do kraja fajla. Ukoliko nije, nastaviće sa izvršavanjem
iskaza unutar vitičastih zagrada. Ako na kraju dođe do kraja fajla znači da korisnik nije uneo
odgovarajuće podatke tako da će ovaj iskaz da se izvršava i da će u nastavku izvršenja koda
poslati korisnika na stranicu AccessDenied odakle mu je onemogućena poseta ostalih stranica sa
te lokacije sem stranice za logovanje.
U narednom delu koda (crvene boje) uklanja se prazan prostor ili neki drugi simbol od
samog početka do kraja fajla password koji je učitan. A zatim se u promenljivoj $line pamte
podaci prethodno izdeljeni po redovima i prisvojeni funkcijom fgets – koja preuzima sadržinu
linije na koju pokazivač ukazuje. Nakon toga sadržina promenljive $line delimo na dva dela, baš
na mestu gde se nalazi zapeta i to se pamti u promenljivoj $userPass.
U delu koda ispisanog plavom bojom vrednost promenljive $userPass[0] se upoređuje sa
username-om a $userPass[1] sa password-om koje je korisnik ukucao u formular za prijavu i koji
je prosleđen od strane index skripta. Ukoliko su vrednosti tačne u sesiju se smešta korisničko
ime korisnika a kreiraju se i kolačići u koje se smešta korisničko ime i password i šalju na
korisnikov računar. Zatim se korisnik prosleđuje na stranicu za uspešno logovane korisnike
LoginSeccessfull.

- 39 -
PHP sesija

6.3.3 LoginSuccessfull

Ovo je prva stranica koja se otvara korisnicima koji su se uspešno ulogovali, i njena
sadržina je sledeća:

<?php session_start();
if (!isset($_SESSION["username"])) {
header("location: index.php");
die(); } ?>
<html>
<head><title> Uspesno ulogovan </title></head>
<body bgcolor="#888888">
<table width="740" border="0" align="center" cellpadding="0"
cellspacing="0">
<tr><img src="crna.jpg">
<td width="3" bgcolor="000000"></td>
<td width="8" bgcolor="#cccccc"></td><td bgcolor="#cccccc">
Uspesno ste se ulogovali: <font size="15px" color="blue">
<?php echo $_SESSION["username"]; ?> </font>
<center><br>
<font size=10 color="000000"> Visoka tehnicka škola
strukovnih studija - Niš </font><br>
<img src="visoka_skola.jpg"> </center> <br> <br>
<p>Link do naredne stranice:
<a href="LogPage2.php">Klikni ovde</a>.</p>
<p>Izloguj se:
<a href="logout.php">Klikni ovde</a>.</p>
</td>
<td width="3" bgcolor="#000000">&nbsp;</td>
</tr>
</table></body>
</html>

- 40 -
PHP sesija

Na početku ovog fajla kao i kod ostalih nalazi se session_start() funkcija i ono što će ona
uraditi je da će proveriti da li na korisnikovom računaru postoji sesioni kolačić i uporediti njegov
ID number sa sesionim na serveru i tako pokušati da nađe taj fajl ako on uopšte postoji, u slučaju
da ne postoji ili da ne postoji ni sesioni kolačić na korisnikovom računaru ova finkcija će kreirati
novu sesiju i smestiti odgovarajući sesioni kolačić u korisnikov čitač. Nakon nje dolazi izraz koji
ispituje da li je sesija sa imenom username već setovana na neku vrednost i ako nije setovana on
korisnika prosleđuje na stranicu za prijavu a datu stranicu (LiginSuccessful) zatvara. Ukoliko je
sesija setovana onda nastavlja da se izvršava sadržaj stranice.
U daljem tekstu skripta nalazi se HTML kod tj. tabela, gotovo identična kao na Index
stranici u kojoj je podešena pozadina stranice i formatira font (veličina i boja) teksta koja će biti
odštampana u php blokom. U narednom PHP bloku koji je obeležen plavom bojom ispisana je
komanda echo kojom ću odštampati sadržinu sesije pod imenom „username” tako da svaki
korisnik koji se uspešno uloguje imaće na ovoj stranici ispisan njegov username. U nastavku
HTML koda postavljena su dva hiperlinka, jedan za odlazak na stranicu LogPage2.php a drugi
za odlazak na stranicu logout.php koja služi za odjavljivanje korisnika sa sajta.

Slika 6.3.3 Izgled LoginSeccessfull stranice

- 41 -
PHP sesija

6.3.4 AccessDenied

Ovo je stranica na koju se korisnik preusmerava ukoliko se nije uspešno prijavio na index
stranicu.

Slika 6.3.4 Izgled AccessDenied sranice

Ona je u potpunoosti sačinjena od HTML koda i njen izgled je konfigurisan pomoću


tabele. Dakle, sadržaj ove Web stranice nalazi se u poljima tabele, tako da je time bolje
pozicioniran njen sadržaj prilikom interpretiranja u različitim čitačima. Dešava se da različiti
čitači istu stranicu interpretiraju na drugačiji način s toga postavljanjem tabele i slike koja je
odredjene veliline (u ovom slučaju 740 piksela) ja postižem to da je su mi elementi uvek
pozicionirani na određeno mesto. U ćelijama takođe definišem i boju pozadine tih ćelija,a ujedno
i Web stranice, i poruka koja se ispisuje korisniku koji učita ovu stranicu (korisniku koji nije

- 42 -
PHP sesija

uneo ispravno korisničko ime i password). U nastavku koda nalazi se hipertekstualna veza koja
korisnika ukoliko klikne na nju odvodi na index stranicu (stranicu za prijavu).

<html>
<head><title> Niste ulogovani </title></head>
<body bgcolor="red">
<table width="740" border="0" align="center"
cellpadding="0" cellspacing="0">
<tr><img src="crna.jpg">
<td width="3" bgcolor="000000"></td>
<td width="15" bgcolor="#dddddd"></td>
<td bgcolor="dddddd"><font size="10"><center>
<br>Niste uneli ispravan username ili password</font>
<br><img src=Nologin.gif>
</center>
<p><font size="5">Vratite se na stranicu za LogIn::
<a href="logout.php">Klikni ovde</a>.</font></p>
</td>
<td width="3" bgcolor="#000000">&nbsp;</td>
</tr>
</table></body>
</html>

- 43 -
PHP sesija

6.3.5 Logout

Logout skript je skript koji služi za odjavljivanje korisnika sa lokacije. On je sledeće


sadržine.

<?php
@session_unset ();
setcookie('username', '0',time()-86400, '/');
setcookie('password', '0',time()-86400, '/');
header("Location: index.php");
?>

Ovaj skript sadrži funkciju @session_unset() koja oslobađa sve promenljive sesije, tako
da one ostaju prazne. Sledeći blok komandi postavlja kolačiće na vrednost 0 a vreme koliko će
dugo postojati na korisnikovom računaru postavlja na -86400 (jedan dan), tako brišemo taj
kolačić. I an kraju, kada se sve prethodne funkcije izvrše ovaj skript prosleđuje korisnika na
stranicu za prijavu.

- 44 -
PHP sesija

6.3.6 LogPage2

Ovo je druga Web stranica koju posetilac moje Web lokacije koji se uspešno prijavio
može da poseti. Sadržina ove stranice je gotovo identična prvoj stranici (LoginSeccessful).
Sadržaj ove stranice je sledeći:

<?php session_start();
if (!isset($_SESSION["username"])) {
header("location: index.php");
die(); } ?>
<html><head><title> Stranica B </title></head>
<body bgcolor="#g68fff">
<table width="740" border="0" align="center"
cellpadding="0" cellspacing="0">
<tr><img src="crna.jpg">
<td width="3" bgcolor="#000000"></td>
<td width="8" bgcolor="#ddeeff"></td>
<td bgcolor="#ddeeff">
Korisnicko ime: <font size="15px" color="blue">
<?php echo $_SESSION["username"]; ?> </font><center>
<br><font size=10 color="000000"> INFORMACIJE </font><center>
<br><font size="6">Visoka Tehnicka skola strukovnih studija
</font><br>
<br>Adresa: Aleksandra Medvedeva 20, 18 000 Nis, Srbija
<br>Kontakt Telefon: +381 18 588 211, 588 039, 588 040
<br>Oficialni sajt: www.vtsnis.edu.rs
<br>Email adresa: info@vtsnis.edu.rs
<p>Vratite se na pocetnu stranicu:
<a href="LoginSuccessfull.php">Klikni ovde</a>.</p>
<p>Izloguj se:
<a href="logout.php">Klikni ovde</a>.</p>
</td><td width="3" bgcolor="#000000">&nbsp;</td>
</tr></center></table><body>
</html>

- 45 -
PHP sesija

Kao i ostale stranice i ova počinje funkcijom session_start() i njena uloga u ovom skriptu
je ista kao i u prethodnim. Nakon toga se nalazi isset() funkcija koja ispituje da li je vrednost
sesije pod nazivom username već setovana, ako nije ona korisnika automatski šalje na index
stranicu da bi se prijavio i završava izvršavanje tekuće stranice, a u slučaju da je ta sesija
setovana na neku vrednost izvršenje stranice se nastavlja. I ova stranica kao i ostale sadrži
HTML kod. U nastavku koda svi podaci, formatiranje pozadine stranice, zatim podešavanje font
(veličine i boje slova) kojim će biti odštampan tekst u predstojećem PHP bloku nalzi se u tabeli.
PHP blok koji je sadržan u jednoj od kolona sadrži komandu „echo” koja štampa na Web stranici
korisničko ime iz sesije pod nazivom „username”. Dakle, pronalazi Sesiju pod nazivom
“username” i štampa njen sadržaj na stranicu. Nakon PHP bloka ponovo slede HTML komade
kojima su postavljeni hiperlinkovi do stranice za Logout i stranice LoginSeccessfull. U koliko
korisnik želi da se vrati na prvu korisničku stranicu ili da se izloguje može izabrati jednu od te
dve opcije.

Sledi izgled ove stranice:

Slika 6.3.6 Izgled LogPage2 stranice

- 46 -
PHP sesija

6.3.7 Password

Ovo je poslednji fajl moje aplikacije. To je tekstualni fajl u kome se nalaze imena
korisnika i njegovi password-i. Da bi ovaj fajl bio upotrebljiv tj. da bi PHP mogao ispravno da
raspolaže njime, ime korisnika i password moraju biti odvojeni samo jednim zarezom i svaki
korisnik tj njegovo ime i password moraju bitu u posebnom redu. Sadržina ovog fajla izgleda
ovako:
Velickovic,prof
milan,radivojko
fliper,fliper
f,r

- 47 -
PHP sesija

7. ZAKLJUČAK

Ključna stvar je da su kolačići jako zgodni za postavljanje podataka na računar korisnika


koje možemo da iskoristimo kasnije. Ako se vrate na naš sajt za mesec dana, za godinu dana ako
je kolačić jos uvek tu možemo da pokupimo te informnacije i znamo nesto o tom korisniku ali ne
možemo baš da budemo sigurni da će kolačići biti tu zato treba da proverimo da li su oni tu pre
nego što im dopustimo da učestvuju u našoj aplikaciji. Zato što ti podaci nisu tako pouzdani, i
kao što sam već pokazao mi možemo da vidimo sadržaj kolačića kao korisnici pa čak možemo i
promeniti taj sadržaj u kolačiću, zato saj ja sagledali još jednu vrstu kolačića koja nam daje dosta
više opcija i malo veću sigurnost koja se zove sesija „Session”.

Korišćenje sesije omogućava da se približimo korak bliže korisniku koji poseti našu
intrernet lokaciju. Koristeći sesiju ja sam uspeo da interaktivno povežem više stranica koje sadrži
moja Web lokacija. Na svakoj posećenoj stranici moja aplikacija je svesna prisustva tog
određenog korisnika. Dakle problem koji postoji kod samog načina funkcionisanja HTTP
protokola (da se svaki zahtev šalje nezavisno od prethodnog i da zbog toga ne možemo imati
kontrolu nad time jeste li taj korisnik već radio nešto u prethodnom zahtevu ili ne) prevazišao
sam korišćenjem sesije.

To je samo jedna, dobra strana sesije, ali isto tako kod sesije poseduje i neke mane. To je
na primer da smo mi upravo kreirali fajl na našem serveru i taj fajl je veoma mali jer jedino što
sadrži je korisničko ime, ali vremenom taj fajl može postajati veći i veći. Mi u njega možemo da
smestimo veliku količinu podataka ako imamo veću aplikaciju i možemo da dođemo do stotine
ili par hiljada fajlova zato moramo da razmišljamo i o čišćenju tih fajlova s vremena na vreme.
Za to postoje načini koji su iz domena administracije servera koji pomažu u tome. Ako budemo
radili neki ozbiljniji industrijski sajt možemo raditi session cleanup s vremena na vreme i brisati
sesije koje nisu korišćene neki određeni period. Naravno kada to radimo mi brišemo i
korisnikove podatke ali sesija će to srediti tako što će potražiti taj fajl i reći on više ne postoji i
kreirati novu sesiju za korisnika.

- 48 -
PHP sesija

LITERATURA

[1] Bill McCarty , “Osnove PHP4” – Kompjuter biblioteka, 2002.

[2] Kris Jamsa,Konrad King, Andy Anderson, HTML i Web dizajn kroz praktične
primere, Mikro knjiga Beograd, 2003.

[3]Mr Zoran Veličković, “Internet Tehnologije–Praktikum laboratorijskih vežbi”, Niš 2006

[4] http://www.php.net/manual/en/index.php zadnja poseta: 20.06.2009

[5] Video tutorial PHP with MySQL - http://www.Lynda.com zadnja poseta: 20.05.2009

[6] http://sr.wikipedia.org/wiki/PHP zadnja poseta: 18.06.2009

[7] http://sr.wikipedia.org/wiki/HTTP zadnja poseta: 15.06.2009

[8] http://sr.wikipedia.org/wiki/Интернет_протокол zadnja poseta: 15.06.2009

[9] http://sr.wikipedia.org/wiki/Mrežni_protokol#Internet_protokol_stek
zadnja poseta: 15.06.2009

[10] http://arhiva.elitesecurity.org/t16262-sesije zadnja poseta: 20.05.2009

[11] http://www.elitesecurity.org/t96769-php-forum-amp-kolčići zadnja poseta:20.06.2009

[12] http://www.elitesecurity.org/t66178-0 zadnja poseta: 12.06.2009

- 49 -

You might also like