61
VSITE Programiranje na Internetu PIN Ivan Britvić [email protected] bit.ly/PIN1213

Programiranje Na Internetu

Embed Size (px)

DESCRIPTION

educational material

Citation preview

Page 1: Programiranje Na Internetu

VSITE

Programiranje na InternetuPIN

Ivan Britvić[email protected]/PIN1213

Page 2: Programiranje Na Internetu

O predmetu

• kratica: PIN• 5 ECTS bodova• Opis predmeta:

Razvoj dinamičkih web aplikacija. Značenje modela podataka uInternet aplikacijama. Poslužiteljski orijentirani skriptni jezici.Programiranje ASP i ASP.NET, ADO i ADO.NET . Troslojnaarhitektura Internet aplikacija . Sigurnost podataka i kripto-zaštita uporabom XML-a na klijent strani. Izrada Web aplikacijeod modela podataka do Web sučelja koristeći MS SQL Server,HTML, JavaScript, ASP, XML tehnologije. Problemi podrškerazličitih web preglednika.

VSITE

Page 3: Programiranje Na Internetu

Organizacija predmeta

• 2 kolokvija, izlazni blicevi• laboratorijske vježbe - bit.ly/pinlab1112• na prva dva roka je moguće ispraviti 1 kolokvij• kasnije se polaže cijeli ispit• bit će programiranja• očekuje se rad i vježbanje kod kuće• za uspješno pohađanje i shvaćanje ovog predmeta potrebna

su predznanja:o s MUP-a (HTML, JavaScript, XML)o baze (kreiranje tablica, SELECT, INSERT, UPDATE,

DELETE, primarni i strani ključevi)o osnove programiranja (if, for, do-while, varijable, objekti,

funkcije, ...)

VSITE

Page 4: Programiranje Na Internetu

Kako položiti?

• aktivno sudjelovati na predavanjima (bit će puno primjera)o razmišljatio raditi bilješke (ovi slide-ovi ne sadrže sve što morate

znati)o čim nešto nije jasno, pitajteo nemojte zaostajati s učenjem jer je gradivo povezano

• doma proučiti primjere s predavanja (svaki tjedan)o ako nešto nije jasno, pogledati još jednom slide-oveo ako još uvijek nije jasno, pitati Google, Bing,

DuckDuckGo, ...o poslati mail na [email protected]

• samostalno rješavati laboratorijske vježbeo gotovo sve odgovore ćete dobiti na predavanjimao na kraju labosa, imat ćete skoro funkcionalni web shop

VSITE

Page 5: Programiranje Na Internetu

Materijali

• prezentacije sa predavanja (postoje i stare na forumima, alisu outdated 2003/2004 http://ww2.vsite.hr/?q=node/1920)

• bilo koja knjiga o ASP.NET• Google is your friend• http://www.asp.net/ (ima i video tutoriala)• http://stackoverflow.com/• http://stackoverflow.com/questions/194812/list-of-freely-

available-programming-books

VSITE

Page 6: Programiranje Na Internetu

Sadržaj predmeta

1. Klijent - server arhitektura2. Web server i Web aplikacija3. ASP.NET 4.0• uvod u C#• code-behind, kontrole, postback, querystring, events,

session, cookies• spajanje na bazu (CRUD)• MVC

VSITE

Page 7: Programiranje Na Internetu

Klijent - server arhitektura

• distribuirana aplikacija• server dijeli svoje resurse klijentima• klijent ne dijeli svoje resurse• klijent od servera zahtijeva sadržaj ili obavljanje neke

funkcije• obično komuniciraju preko računalne mreže (mogu biti i na

istom stroju)• klijent inicira komunikaciju, a server čeka zahtjev

VSITE

Page 8: Programiranje Na Internetu

Web server• računalo (ili više njih) i software za distribucija sadržaja• pristupa mu se preko Interneta ili intraneta• najčešće se koristi za serviranje web stranica, tj. HTML

dokumenta - statičke HTML stranice• još servira i slike, CSS, skripte, video sadržaj, ...• klijent je najčešće web preglednik (browser)• web preglednik i web server komuniciraju preko HTTP(S)• većina web servera podržava izvršavanje skripti i programa

(server-side scripting), npr. ASP ili PHP• to znači da se HTML dokumenti mogu generirati "on-the-fly"

- tkz. dinamičke stranice

VSITE

Page 9: Programiranje Na Internetu

Web serverVSITE

Page 10: Programiranje Na Internetu

HTTPVSITE

• Hypertext Transfer Protocol• služi za komunikaciju između klijenta i servera• fukcionira na principu zahtjev - odgovor (request -

response)• HTTP resurs je mjesto na mreži identificirano sa URL-om

(uniform resourse locator) - počinje sa http://• zajedno sa HTML-om tvore mrežu međusobno povezanih

dokumenata, tj. World Wide Web• originalna verzija HTTP/1.0 je koristila posebnu konekciju

za svaki resurs• HTTP/1.1 može jednu konekciju koristiti više puta• postoji 9 glagola (verb) s kojima se vrše akcije na

resursima: HEAD, GET, POST, PUT, DELETE, TRACE,OPTIONS, CONNECT, PATCH

Page 11: Programiranje Na Internetu

HTTPVSITE

~ $ telnet www.vsite.hr 80Trying 193.198.56.131...Connected to NS1.vsite.hr.Escape character is '^]'.GET / http/1.1Host: vsite.hr

HTTP/1.1 200 OKDate: Sun, 09 Oct 2011 11:00:06 GMTServer: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny13 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8gX-Powered-By: PHP/5.2.6-1+lenny13Expires: Sun, 19 Nov 1978 05:00:00 GMTLast-Modified: Sun, 09 Oct 2011 11:00:06 +0000Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0ETag: "1318158006"X-Generator: Drupal 7 (http://drupal.org)Vary: Accept-EncodingTransfer-Encoding: chunkedContent-Type: text/html; charset=utf-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN""http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">

<html xmlns="http://www.w3.org/...<link rel="shortcut icon" href="http://vsite.hr/sites/default/files/V_24x26.png" type="image/png" /><meta name="Generator" content="Drupal 7 (http://drupal.org)" /><link rel="alternate" type="application/rss+xml" title="Visoka škola za informacijske tehnologije RSS"href="http://vsite.hr/?q=hr/rss.xml" />

<title>Visoka škola za informacijske tehnologije | Studiraj IT</title> ...

Page 12: Programiranje Na Internetu

HTTP serveriVSITE

• HTTP serveri obično čekaju zahtjev na portu 80• HTTP serveri moraju implementirati GET, POST i

OPTIONS glagole• GET - dohvaća neki resurs - ne bi se smjela napraviti bilo

koja druga akcija osim dohvaćanja• POST - šalje podatke na procesiranja (npr. sa HTML

forme); može rezultirati stvarenjem novog ili promjenompostojećeg resursa

• kasnije ćemo još pričati o POST i GET• OPTIONS - vraća listu HTTP glagola koje server podržava

Page 13: Programiranje Na Internetu

HTTP - statusni kodovi odgovoraVSITE

• prva linija odgovora (response) se zove statusna linija(status line)

• statusna linija sadrži informaciju koji klijent koristi zaprikazivanje odgovora

• lista češćih odgovora:o 200 OK - uspješan HTTP zahjevo 301 Moved Permanatly - redirekcija na novi URLo 400 Bad Request - zahtjev sa krivom sintaksomo 401 Unauthorized - kriva autentikacijao 403 Forbidden - dobar zahtjev, ali server ne želi

odgovoriti (ni autentikacija neće pomoći)o 404 Not Found - resurs nije nađeno 500 Internal Server Error - generička greškao 503 Service Unavailable - server je privremeno

nedostupan

Page 14: Programiranje Na Internetu

HTTP - protokol bez stanjaVSITE

• čim se dohvate svi resursi, prekida se veza sa serverom• HTTP server ne prati informacije i statuse o svojim

klijentima• web aplikacije nekad (tj. često) trebaju pratiti korisnika

preko više stranica (requesta), npr. korisnik stavlja višeartikala u košaricu

• taj problem se obično rješava upotrebom kolačića(cookies), server side sesijama (sessions), skrivenimvarijablama (na formi), prepisivanjem URL-ova, čak ibazama podataka.

Page 15: Programiranje Na Internetu

HTTPS - HTTP SecureVSITE

• sigurna verzija HTTP protokola• koristi SSL/TLS za ekripciju poruka• također, pruža identifikaciju web servera• koristi se za plaćanja i za osjetljive informacije• obično koristi port 443• HTTPS URL-ovi počinju sa https://

Page 16: Programiranje Na Internetu

IISVSITE

• Internet Information Services (prije Server)• drugi najpopularniji web server (iza Apache-a)• radi na Windowsima, tj. integralni dio Windows Server

linija• može se uključiti na nekim verzijama XP, Viste i 7 (turn

windows features on and off) -http://learn.iis.net/page.aspx/28/installing-iis-7-and-above-on-windows-vista-and-windows-7/

• postoji i Express verzija• podržava ASP web framework (po defaultu)• također, podržava i FastCGI protokol koji omogućava

programima komunikaciju sa Web serverom• to znači da se na njemu mogu izvoditi skripte (u teoriji) u

bilo kojem programskom jeziku koji ima napisane bingingeza FastCGI (većina), npr. PHP, Java, Python, Ruby, ...

Page 17: Programiranje Na Internetu

Apache HTTP ServerVSITE

• najpopularniji Web server, besplatan• radi na većini operacijskih sustava (najčešće je instaliran

na Linuxu)• postoji dosta modula koji proširuju osnovnu

funckionalnost, npr. mod_php, mod_perl, mod_python,mod_fastcgi, mod_ssl, mod_gzip, mod_rewrite, ...

• LAMP - Linux, Apache, MySQL, PHP (Perl/Python) - skupbesplatnog softwera za izradu generičkog web servera

• obično je Linux hosting jeftiniji od Windows hostinga• XAMPP - paket koji na Windowsima instalira Apache,

MySQL, PHP i Perl• upozorenje za labose: oba servera koriste port 80 i 443

(po defaultu) tako da ne mogu u isto vrijeme raditi na tomportu (također, nekad se Skype smjesti na port 80)

Page 18: Programiranje Na Internetu

Razvojna i testna okolinaVSITE

• razvoj web aplikacija se obično radi na lokalnom računalu• spaja se na testnu bazu• kada se doda željena funckionalnost, kod se commita u

bazu koda (CVS)• na neutralnom lokalnom mjestu se provjeri se da prolaze svi

testovi• tek onda se promjene šalju na produkcijski server - publish• prednost web aplikacije da se vrlo lagono mogu ispravljati

bugovi, ali isto tako se vrlo lagano mogu dodavati novi (svimklijentima)

• treba biti vrlo oprezan kod stavljanja nove verzije na server• da bi se izbjegle dodatne greške kod postupka objave

(publisha), treba napraviti skriptu koja uvijek radi jednakipostupak, tj. one step publish (build)

• http://www.joelonsoftware.com/articles/fog0000000043.html

Page 19: Programiranje Na Internetu

Razvojni alatiVSITE

• za ovaj predmet smo odabrali smo Windows razvojnuokolinu

• ASP.NET kao aplikacijski framework• SQL Server Compact ili Express 2008 kao besplatna baza

podataka• Visual Web Developer Express 2010 za IDE (naravno,

poslužit će i ostale inačice Visual Studia)• najlakše ih je instalirati preko Web Platform Installera -

http://www.microsoft.com/web/downloads/platform.aspx• P.S. uz Visual Studio, Microsoft daje još jedan alat zvan

Web Matrix, jednostavan i za početnike

Page 20: Programiranje Na Internetu

Web forme

• na MUP-u smo naučili kako se u HTML-u rade forme zakorisnički unos

• naučili smo i da se te forme mogu slati nekom serveru(action) pomoću dvije metode (method)o GETo POST

• sada ćemo naučiti kako server čita taj unos i odgovaradinamičkom stranicom - konačno!

• prvo ćemo napraviti primjere u Classic ASP-u i PHP

VSITE

Page 21: Programiranje Na Internetu

POST i GET (ASP)

student.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...><html xmlns="http://www.w3.org/1999/xhtml" ><head>

<title>Student</title></head><body>

<div><form id="student" method="post" action="pozdrav.asp">

<p>Ime: <input type="text" id="ime" name="ime" /></p><p>Prezime: <input type="text" id="prezime"

name="prezime" /></p><p><input type="submit" value="Pošalji" /></p>

</form></div>

</body></html>

pozdrav.asp (classic asp)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...><html xmlns="http://www.w3.org/1999/xhtml" ><head>

<title>Pozdrav</title></head><body>

<div><%

response.write("Pozdrav, " & request.form("ime") & " " &request.form("prezime"))

%></div>

</body></html>

• ako formu pošaljemo sa GET, za čitanje na serverskojstrani koristimo request.querystring

VSITE

Page 22: Programiranje Na Internetu

POST i GET (PHP)

student.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...><html xmlns="http://www.w3.org/1999/xhtml" ><head>

<title>Student</title></head><body>

<div><form id="student" method="post" action="pozdrav.php">

<p>Ime: <input type="text" id="ime" name="ime" /></p><p>Prezime: <input type="text" id="prezime"

name="prezime" /></p><p><input type="submit" value="Pošalji" /></p>

</form></div>

</body></html>

pozdrav.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...><html xmlns="http://www.w3.org/1999/xhtml" ><head>

<title>Pozdrav</title></head><body>

<div><?php

print "Pozdrav, " . $_POST["ime"] . " " . $_POST["prezime"]?>

</div></body></html>

• ako formu pošaljemo sa GET, za čitanje na serverskojstrani koristimo $_GET

VSITE

Page 23: Programiranje Na Internetu

POST i GET zaključak• vrlo sličan kod i za ASP i PHP• kod POST-a, vrijedosti forme se šalju u tijelu HTTP zahtjeva

o običan korisnik ih ne vidi nigdje na ekranuo može se poslati gotovo neograničen količinu podataka

• kod GET-a, vrijednosti forme se šalju preko URL-ao parametri su vidljivi u URL-u - takav URL se može staviti

u bookmark ili poslati mailomo veličina je ograničenao URL se sastoji: od dijela koji piše pod action ? parovi imena i vrijednosti odvojenih s = & koji razdvaja parove

http://primjer.com/pozdrav.asp?ime=Pero&prezime=Peri%C4%87

VSITE

Page 24: Programiranje Na Internetu

ASP.NET

VSITE

Page 25: Programiranje Na Internetu

ASP.NET

• Microsoftova tehnologija (web framework) za kreiranjedinamičkih stranica

• stranice mogu biti pisane u bilo kojem .NET jeziku (trenutnostanje: 70% C#, 30% VB.NET)

• posrednik između web servera i .NET klasa• ASP.NET stranice vraćaju validan HTML klijentima• 3 dijela:

o Web Forms (ovo ćemo raditi)o MVC - Model View Controllero Web Pages - nova jednostavna tehnologija namjenjena

početnicima (koristi Razor sintaksu)

VSITE

Page 26: Programiranje Na Internetu

Visual Studio 2010

• 2 načina za strukturiranje web site-a:o web site project svi file-ovi unutar web-site direktorija se smatraju

dijelom projekta stranice se kompajliraju neovisno što znači, dovoljno je spremiti kod i osvježiti stranicu

preglednika da bi se vidjele promjene ovo ćemo koristiti na predavanjima

o web aplication project kreiraju se solution i project file u zasebnim

direktorijima u project file-u je zapisano koji file-ovi su dio projekta sve stranice se kompajliraju u jedan DLL

VSITE

Page 27: Programiranje Na Internetu

Prva ASP.NET stranica

• sastoji se od 2 dijelao markup - statički HTML pomiješan sa Web kontrolama

(.aspx file)o server-side kod - sadrži kod napisan u nekom .NET jeziku

(obično C# ili VB .NET)može biti dio .aspx file-a ili poseban .cs ili .vb file

• ASP .NET sadrži pregršt Web kontrola koje prožaju različitefunkcionalnosti

• dodaju se na stranicu double-clickom ili drag & drop izToolbox-a

VSITE

Page 28: Programiranje Na Internetu

Server-side kod

• klasa koja sadrži event handler-e (rukovatelj događaja)o page-level - izvršavaju se kod događaja na stranici; npr.

svaki puta kod je stranica posjećena, izvršava se Loaddogađaj (event) to znači, da se unutar Page Load handlera može

izvesti neki kod svakog otvaranja straniceo web kontrola - web kontrola može izazvati događaj npr., Button Click događaj se pojavi kad korisnik klikne

na button

VSITE

Page 29: Programiranje Na Internetu

Server-side procesiranje

• kad se posjeti ASP .NET stranica, samo HTML se vraćaklijentu

• Web kontrole se renderiraju u odgovarajuće HTML elemente• server-side kod se ne šalje klijentu• da bi se server-side kod izvršio, klijent mora napraviti

zahtjev prema serveruo ovo se može napraviti na 3 načina: promjenom URL adrese (upisivanje adrese u

preglednik, klik na link, redirect) forma se šalje klikom na submit button client-side JavaScript se izvršava koji šalje formu

VSITE

Page 30: Programiranje Na Internetu

Postback

• postback forma je forma koja koristi method="post" i šaljekorisnika NATRAG (BACK) na istu stranicu, tj. action jejednak URL-u od trenutne stranice

• mnoge web kontrole mogu imate server-side događaje(evente), tj. kod koji se izvršava kod tog događaja

• ti događaji okidaju samo kod postback-a• već smo spominjali, Page Load event okine kod svakog

učitavanja straniceo Page objekt ima svojstvo (property) Page.IsPostBack

kojim se određuje da li se dogodio postback ili smo prviput na stranici

• nekoliko Web kontrola imaju AutoPostBack svojstvo(property) koji govori da li se postback događa automatskikod promjene stranja kontrole

VSITE

Page 31: Programiranje Na Internetu

Najčešće web kontrole

• 3 vrste web kontrolao za prikazivanje teksta - Literal, Labelo za prihvat korisničkog unosa - TextBox, CheckBox,

RadioButton, DropDownList, ...o CRUD na bazi - GridView, DetailsView, FormView, ...

• svaka web kontrola se renderira na klijentu kao odgovarajućiHTML elemento TextBox se pretvara u <input type="text" .../>o Button u <input type="submit" .. />o Label u <span ... />

VSITE

Page 32: Programiranje Na Internetu

Lista web kontrola

Page 33: Programiranje Na Internetu

Zajednička svojstva web kontrola

• ID - jednoznačno identificira kontrolu• EnableViewState - da li kontrola čuva stanje (kasnije ćemo o

tome)• Visible - da li je vidljiva• BackColor, BorderColor, BorderStyle, BorderWidth• CssClass - ime CSS klase u renderiranom HTML elementu• Enabled - da li radi ili je "zasivljena"• Font• ForeColor• Height/Width

VSITE

Page 34: Programiranje Na Internetu

Web forme i postback

• ASP.NET stranice komuniciraju s koristikom preko webformi

• web forma je server-side kontrola koja se renderira kaopostback forma

VSITE

<form id="form1" runat="server">...

</form>

<form name="form1" method="post"action="Default.aspx"

id="form1"><div>

<input type="hidden" name="__VIEWSTATE"id="__VIEWSTATE" value="viewStateVrijednost" />

</div>

... rendenirani rezultat web kontrola

<input type="hidden" name="__EVENTVALIDATION"id="__EVENTVALIDATION"value="eventValidationVrijednost" />

</form>

Page 35: Programiranje Na Internetu

Web forme i postback

• kad korisnik pošalje (submit) formuo browser ponovno zatraži istu stranicuo šalju se sve vrijednosti sa forme (uključujući i hidden

elemente)o životni ciklus (lifecycle) ASP.NET

stranice se ponavlja okine se Page Load događaj okinu se događaji web kontrola stranica se renderiraHTML se šalje natrag klijentu

VSITE

Page 36: Programiranje Na Internetu

HTML kontrole i njihove vrijednosti

• na običnoj HTML stranici sa textboxom i submit buttonom,korisnik upiše nešto i pošalje formu

• dogodi se postback, ali kod odgovora, textbox je prazano vraća samo originalni HTML kod

• kod ASP.NET stranica, web kontrole zapamte svojuvrijednost kod postbackao ASP.NET engine POSTom dobije vrijednosti tih kontrola

(npr. text u text box-u ili kvačicu u check box-u)o kod renderiranja odgovarajućih HTML kontrola, ako je

moguće, podesi se vrijednost (value) tih kontrolao to se događa prije Page Load u dijelu koji se zove

Initialization

VSITE

Page 37: Programiranje Na Internetu

ViewStateVSITE

• neka svojstva se mogu i programski mjenjati (npr. bojakontrole)

• takva svojstva se mogu pamtiti kroz nekoliko postback-ovau ViewState-u

• svaka takva promjena vrijednosti svojstva se pišu u hiddenpolje

• u ViewState-u se ne sprema vrijednost kontrola• upozorenje: pretjerana upotreba ViewState-a može dovesti

do "teških" stranica• u ViewState-u se mogu pamtiti i bilo koje druge,

programerski definirane vrijednosti:o ViewState["daj_mi_ime"] = neka_vrijedost; //pisanjeo (tip_objekta)ViewState["daj_mi_ime"] // čitanje

Page 38: Programiranje Na Internetu

Master stranica

• prvo se definiraju te fiksne zone na master stranici (menu,header, footer, ...)

• gdje god želimo promjenjivo mjesto, dodajemoContentPlaceHolder (može ih biti više od jedan) - svaki imaID

• na običnim stranica dodajemo Content elemente kojireferenciraju ContentPlaceHolderID

VSITE

Page 39: Programiranje Na Internetu

CookiesVSITE

• mali tekstualne datoteke na klijentskim računalima (baš nakorisnikovom hard disku)

• cookie (kolačić) može sadržavati informacije koje webaplikacija čita kod svakog posjeta

• ako web aplikacija zapiše cookie, browser taj cookie šaljekod svakog idućeg zahtjeva prema toj aplikaciji

• u njima se obično pamte podaci o korisniku, npr.:o lista TV programa koji zanimaju korisnikao podatak da li je korisnik već ispunio anketuo korisničko ime (korisnik ne treba ponovno unositi

korisničko ime i lozinku - remember me on thiscomputer)

• neka ograničenja: 4096 byte-ova, 20 cookie-a po site-u,korisnik može zabraniti (ili obrisati) cookie na svomračunalu

Page 40: Programiranje Na Internetu

CookiesVSITE

• pisanje:Response.Cookies["korisnickeInformacije"]["korisnickoIme"] = "Mirko";Response.Cookies["korisnickeInformacije"]["zadnjiPosjet"] = DateTime.Now.ToString();Response.Cookies["korisnickeInformacije"].Expires = DateTime.Now.AddDays(1);ili:HttpCookie aCookie = new HttpCookie("korisnickeInformacije");aCookie.Values["korisnickoIme"] = "Slavko";aCookie.Values["zadnjiPosjet"] = DateTime.Now.ToString();aCookie.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(aCookie);

• čitanjeif(Request.Cookies["korisnickeInformacije"] != null){ Label1.Text = Server.HtmlEncode(Request.Cookies["korisnickeInformacije"]["korisnickoIme"]);Label2.Text = Server.HtmlEncode(Request.Cookies["korisnickeInformacije"]["zadnjiPosjet"]);}

Page 41: Programiranje Na Internetu

SessionStateVSITE

• omogućava spremanje i čitanja podataka o pojedinomkorisniku kako on koristi web aplikaciju (na svimstranicama) - npr. stvaranje košarice s proizvodima

• globalne varijable po korisniku na svim stranicama webaplikacije

• ASP.NET session identificira zahtjeve iz istog preglednikau ograničenom vremenskom periodu

• za identifikaciju pojedinog korisnika, koristi se session ID• session ID se pamti (po defaultu) u non-persistant, tj.

session cookie-u - briše se automatski briše kodzatvaranja browsera/taba ili nakon 20 minuta (po defaultu)

• može se slati i preko URL-a (cookieless) - problem kodslaja linkova (2 korisnika imaju isti session ID)

if (Session["logiranKorisnik"] != null) {lblKorisnik.Text = Session["logiranKorisnik"].ToString(); }

Page 42: Programiranje Na Internetu

SessionStateVSITE

• session modes:o InProc - podaci se čuvaju unutar ASP.NET procesao SqlServer - session podaci u bazio StateServer - u posebnom procesu; korisno kod web

farmi, a i s ovim session preživi restart applicationservera

o Custom - custom state providero Off - session state ne radi

<configuration> <system.web> <sessionStatemode="SQLServer" sqlConnectionString="IntegratedSecurity=SSPI;data source=NekiSqlServer;" /></system.web> </configuration>

Page 43: Programiranje Na Internetu

Application StateVSITE

• globalne varijable zajedničke svim korisnicima, tj. globalnikey - value dictionary dostupan sa svim stranica webaplikacije

Application.Lock(); Application["PageRequestCount"] =((int)Application["PageRequestCount"])+1;Application.UnLock();

Page 44: Programiranje Na Internetu

Application StateVSITE

• globalne varijable zajedničke svim korisnicima, tj. globalnikey - value dictionary dostupan sa svim stranica webaplikacije

Application.Lock(); Application["PageRequestCount"] =((int)Application["PageRequestCount"])+1;Application.UnLock();

Page 45: Programiranje Na Internetu

Global.asax

• mjesto gdje se obrađuju (handlaju) globalni događaji naaplikacijio Application_Start - okida kod prvog startanja aplikacijeo Session_Start - kod startanja korisničke sesijeo Session_End - kod zatvaranja sesijeo Aplication_End - kod zatvaranja aplikacijeo Application_Error - kod neobrađene greškeo ...

VSITE

Page 46: Programiranje Na Internetu

Baza podataka

• gotovo svaka web aplikacija se spaja na bazu podataka• ASP.NET radi s većinom modernih baza

o Microsoft SQL Server (2008, 2005, 2000, ...)o Oracleo Accesso bilo koja OLE-DB ili ODBC

• mi ćemo koristiti SQL Server 2008 Compact ili Express• lagano ponavljanje baza

o kreiranje tablicao primarni ključevio strani ključevio osnovni upiti: SELECT, INSERT, UPDATE, DELETE

VSITE

Page 47: Programiranje Na Internetu

Kontrole za rad s bazom

• SqlDataSource kontrola - služi kao proxy za rad s podacima;ne prikazuje podatke, samo ih pripremi

• podaci dobiveni u SqlDateSource-u se mogu vezati(DataBind, DataSource) na razne druge kontrole za prikaz,izmjenu, brisanjeo GridView - tablični prikazo ListView - koristi predloške za prikazo DetailsView - prikaz jednog rekordao FormView - prikaz jednog rekorda uz predloške

VSITE

Page 48: Programiranje Na Internetu

ADO.NET

• ActiveX Data Object for .NET• za pristup bazama podataka• za spajanje na bazu, koriste se data provideri

o System.Data.SqlCliento System.Data.Oledbo Microsoft.Data.Odbco System.Data.OracleCliento System.Data.SqlServerCeo itd

• kod uspostavljanja konekcije na određenu bazu, potrebno jedati ConnectionString

• baze imaju različite connection stringove - popisna http://www.connectionstrings.com/

VSITE

Page 49: Programiranje Na Internetu

ADO.NET - primjer

• u web.config:<configuration>

<connectionStrings><add

name="FaksConnectionString" connectionString="DataSource=|DataDirectory|\faks.sdf"providerName="System.Data.SqlServerCe.4.0"/>

</connectionStrings> ....• u ...cs

string connString =System.Web.Configuration.WebConfigurationManager.ConnectionStrings["FaksConnectionString"].ConnectionString;

VSITE

Page 50: Programiranje Na Internetu

ADO.NET - primjer

SqlCeConnection conn = new SqlCeConnection(connString);conn.Open();SqlCeCommand command = new SqlCeCommand("SELECT *FROM student WHERE pbr=@pbr", conn);command.Parameters.AddWithValue("pbr", 10000);SqlCeDataReader dr = command.ExecuteReader();txtStudenti.Text = "";while (dr.Read()){

txtStudenti.Text += dr[0] + " " + dr["ime"] + " " + dr["prezime"]+ " "+ dr["pbr"] + "\n";}dr.Close();conn.Close();....

VSITE

Page 51: Programiranje Na Internetu

ADO.NET - primjer

command = new SqlCeCommand("SELECT COUNT(*) FROMstudent", conn);int broj = (int)command.ExecuteScalar();txtStudenti.Text += broj.ToString();--------------------------------------------------command = new SqlCeCommand("INSERT INTO student(ime,prezime, pbr) VALUES (@ime, @prezime, @pbr)", conn);command.Parameters.AddWithValue("ime", txtIme.Text);command.Parameters.AddWithValue("prezime",txtPrezime.Text);command.Parameters.AddWithValue("pbr", txtPbr.Text);command.ExecuteNonQuery();conn.Close();......

VSITE

Page 52: Programiranje Na Internetu

Registracija korisnika

• forma za registraciju se sastoji od kućice za korisničko ime inajčešće 2 kućice za lozinku (neki web servisi imaju i jednu,npr. tumblr.com)

• u bazi se lozinka ne bi smjela pamtiti kao čisti teksto korisnici često koriste istu lozinku na više servisa (auto

forum i PayPal)• lozinku treba "hashirati", tj. provući je kroz neki hash

algoritam• svojstva takve hash fukcije:

o lozinka na ulazu u producira drugačiji niz znakova (ili broj)na izlazu iz hash funkcije

o nemoguće (ili jako teško) je iz hashirane lozinke dobitinatrag originalnu lozinku

• kod provjere korisničkog imena i lozinke, treba hashiratilozinku koju je korisnik unio i usporediti je s zapisanomhashiranom lozinkom u bazi

VSITE

Page 53: Programiranje Na Internetu

Registracija korisnika

• najpoznatije hash funkcijeo CRC, MD5, SHA1, SHA256, ...

• dosta stranica na Internutu koristi MD5 što više nije dovoljno• rainbow table (dugina tablica) -

o unaprijed izračunate hash vrijedosti za sve mogućepermutacije (do neke duljine) slova, brojki, znakova

o također za kombinacije riječi iz rječnikao što je lozinka veća, manja je vjerojatnost da je njezina

vrijednost u toj tablici• kao zaštita od napada rainbow tablicama, koristi se SALT

VSITE

Page 54: Programiranje Na Internetu

Registracija korisnika

• SALTo slučajno generiran broj znakova koji se dodaje na lozinku

i onda se zajedno s njom hashirao druga varijanta je da se SALT dodaje na hashiranu

lozinku i onda se još jednom zajedno hashirao zapisuje se u bazu kraj hashirane (i slane) lozinke

string lozinka = "lozinka";Random r = new Random(DateTime.Now.Millisecond);string salt = r.Next().ToString();string hashiranaLozinka = Util.SHA256(lozinka);string hashiranaISlanaLozinka = Util.SHA256(salt +hashiranaLozinka); //ovo se sprema u bazu

VSITE

Page 55: Programiranje Na Internetu

SQL injection

• napad na loše dizajnirane (programski) web site-ove• uz nekakvo normalno ponašanje, na bazi se izvršava

napadačev SQL kod• npr:

o sql = "SELECT * FROM korisnici WHERE name = '" +korisnickoIme + "';"

o napadač vrlo jednostavno može dobiti listu svih korisnikaupisujući (u kućicu za unos imena): ' or '1'='1 ' or '1'='1' --' itd.

o SELECT * FROM users WHERE name = '' OR '1'='1' -- ';

VSITE

Page 56: Programiranje Na Internetu

SQL injection - obrane

• nikad ne vjerovati korisnikovom unosu - validirati na klijentu iserveru, escape-ati korisnički unos

• koristiti parametrizirane query-e• koristiti store-ane procedure• koristiti ORM

VSITE

Page 57: Programiranje Na Internetu

ORM• Object Relationship Mapper - tehnika za pretvaranje

elemenata baze podataka u neki objektno orjentirani jezik• za .NET su najpopularniji:

o Entity Frameworko Linq to SQLo NHibernateo LLBL Gen

• prednosti ORM-a:o rade s više baza - lagana migracijao sigurnost tipova podataka (type safety)o debugiranje, apstrakcijao objavljivanje (jedan DLL)

• prednosti sprocs:o mrežni prometo nema rekompajliranjao puna snaga SQL-a

VSITE

Page 58: Programiranje Na Internetu

Entity Framework• Microsoft-ov preporučeni ORM sustav• Počiva na ADO.NET-u• Moguće ga je koristiti sa raznim bazama podataka• Podržan od Visual Studio-a (2010 i dalje) – omogućeno

automatizirano stvaranje modela iz baze podataka (EDM -Entity data model)

• U VS-u odabiremo novu komponentu ADO.NET EDM ->Generate from database i kreiraju se objekti koji odgovarajutablicama baze

• Olakšano spremanje i mijenjenje podataka, ne koristi seSQL izrazi prilagođeni pojedinoj bazi

VSITE

Page 59: Programiranje Na Internetu

Entity Framework – prikaz dizajnaVSITE

Page 60: Programiranje Na Internetu

Entity Framework - LINQ• Za dohvat podataka najviše se koristi LINQ(Language-

Integrated Query) to entities• LINQ je MS tehnologija koja integrira sa .NET-om kreiranje

upita prema raznim izvorima podataka ()• Definira sintaksu sličnu SQL-u pomoću koje .NET

komponente dohvaćaju podatke (XML datoteke, kolekcijeobjekata, relacijske baze...)

• Za dohvat podataka pišemo upite tipa:from p in db.Productswhere p.Active == trueselect new {ID = p.ProductID,Name = p.ProductName}

VSITE

Page 61: Programiranje Na Internetu

ASP.NET MVC• MVC ( Model-View-Controller) je obrazac koji radi lakšeg

razvoja i održavanja web aplikacija razdvaja tri odvojenekomponente

• Model – Opisuje dio za manipulaciju podacima – uključujedata Model (najčešće ORM kao što je Entity Framework),CRUD operacije, poslovna pravila aplikacije

• View – određuje vizualni dio dakle dizajn stranica,prezentaciju podataka i kontrole za interakciju sa korisnikom

• Controller – poveznica ili most između Model i Viewkomponenti, prihvaća zahtjeve za stranicama, aktivirapotrebne operacije modela i kreira View – dakle webstranicu koju vidi korisnik, brine o sigurnosti itd...

• U VS-u kreiramo novu aplikaciju po ASP.NET MVCtemplate-u, kreiraju se osnovne MVC komponente koje daljeprilagođavamo zahtjevima aplikacije

VSITE