180 likes | 313 Views
Innehåll Vad är CGI? Vad är Forms? Vad är Perl? Forms, CGI och Perl. Något om Cookies. Internetprogrammering Föreläsning 6. Lite mer om CGI-programmering. Läs också: Kursboken kapitel 27 + tillhörande OH-bilder Exemplen på kursens sidor :
E N D
Innehåll Vad är CGI? Vad är Forms? Vad är Perl? Forms, CGI och Perl. Något om Cookies. Internetprogrammering Föreläsning 6 Lite mer om CGI-programmering • Läs också: • Kursboken kapitel 27 + tillhörande OH-bilder • Exemplen på kursens sidor: • http://www.nada.kth.se/kurser/kth/2D4334/00-01/contents/CGI/examples.html
CGI • Vad är CGI? • Common Gateway Interface är ett sätt att koppla program till HTML-sidor • Klienten/bläddraren anropar och skickar data för behandling till ett program som "körs" på en server • Varför CGI? • Ett sätt att koppla beteende till HTML-sidor • HTML är ju mest ett sätt att beskriva innehåll och inte beteende • Exekvering på server istället för på klient • Kan göra exekveringen säkrare (ur både klient och serverhänseende) • Ger tillgång till kataloger, filer och andra program på servern • Om vi tex vill använda databaser så är det lämpligt att placera dem på servern
... • Vilka programmeringsspråk kan man använda? • Ett CGI-script kan skrivas i många olika språk, tex Perl, C/C++, TCL, C Shell, Visual Basic, Python, (Java, Smalltalk) och AppleScript • Vissa av dessa språk stöds inte av alla servrar eller servrar på vissa typer av plattformar • Med vissa servrar kan man också använda språk som Java och Smalltalk • Hur ser ett CGI-program ut? • Ett program som är kopplat via CGI till en websida hanterar data som skickats via GET eller POST från den aktuella sidan • Vidare kan programmet hantera andra omgivningsvariabler för att tex kontrollera om anropande websida "körs" från en bläddrare på en gilltig plattform (vi kan tex se till att endast bläddrare startade på någon av NADAs datorer kan köra CGI-programmet)
CGI på NADA Viktigt! • Placera filen i din cgi-bin-katalog /afs/nada.kth.se/public/www.student/cgi-bin/DittAnvändarnamn • Se till att alla får exekveringsrättigheter • Det är viktigt att sätta rättigheter för filen som innehåller ett CGI-program så att alla kan exekvera den • Det är ett ganska vanligt fel att man glömt sätta dess rättigheter och därmed kan inte servern köra programmet • Under UNIX (dvs bla på NADA) sätter du filens (här FILNAMN) exekveringsflagga (x) så att alla (others) kan köra den genom att utföra följande UNIX-kommando chmod o+x FILNAMN • Om du vill ha mer info om chmod utför kommandotman chmod • Se också till att alla får länka till och läsa från din cgi-bin-katalog fs setacl . system:anyuser rl Viktigt! När du ”står” i katalogen
... • Referensen till dina script blir http://cgi.student/cgi-bin/DittAnvändarnamn/DinFil • Testa dina program så långt det är möjligt utanför webbsystemet först, dvs från terminal i stil med: >perl DinFil.pl • Vi fel i exkvering via web kan du ha hjälp av http://cgi.student/cgi-bin/get-errlog
CGI några referenser • CGI Tutorial • http://agora.leeds.ac.uk/Perl/Cgi/start.html • Allmänn "site" • http://www.cgi-resources.com
Forms • Vad är Forms? • Ett sätt att i HTML skapa sidor som använder inmatning av information från användaren och koppla hantering till program på en server • Vi kan hantera knappar, textfält, listor, mm • Varför Forms? • HTML är ett språk för att beskriva innehåll på sidor och inte hur det skall hanteras • FORMS är ett sätt att beskriva olika grafiska objekt och koppla hanteringen av användarens inmatning via CGI till program skrivna i konventionella programspråk
... "GET" eller "POST" beroende av hur data skall skickas • Forms, hur? • En FORM ser ut ungefär så här <FORM ACTION="ProgramSomHanterarFormen" METHOD="GET"> Namn: <INPUT TYPE="text" NAME="user" SIZE=20 MAXLENGTH=40 VALUE=""> <BR> Lösenord: <INPUT TYPE="password" NAME="password" SIZE=20 MAXLENGTH=40 VALUE=""> <INPUT TYPE ="submit" VALUE="Logga in"> </FORM> Vi anger program till vilket data från FORMEN skickas I FORMEN kan vi både blanda vanlig HTML och komponenter Inmatningsfält Lösenordsfält Så här ger vi namn på komponenten som sedan kan användas av programmet för att läsa dess data En knapp som skickar FORMENS data
Alternativ till FORMS • Som alternativ till FORMS kan vi tex använda • Applets • Fast lite besvärligare att programmera och så kör ju programmet på klientsidan vilket gör att det blir besvärligare att tex uppdatera en katalog på servern • Servlets • Javas motsvarighet till CGI fast anpassat till Java • Plugin • Det finns många typer av program som kan pluggas in till nätbläddraren för att sedan exekvera kod • Ett problem är att det är osäkrare än både applets och CGI då man inte är säker på vad programmet kan göra på klientsidan (kanske ändra filer, starta program osv) • JavaScript, DHTML mm • I många situationer är dessa mer nätbläddrarinbyggda möjligheter enklast (och mest effektivt) att använda
Perl (Practical Extraction and Report Language) För att exemplifiera CGI-script väljer vi att använda Perl. • Vad är Perl? • Perl är ett interpreterande programspråk inspirerat av C och cshell • Finns på många plattformar (fast mest inspirerat av UNIX) • Många funktioner för bla mönstermatchning • Varför Perl? • Relativt enkelt att använda • Går att provköra som vanligt program från terminal • Finns på flera plattformar • Dock inbjuder inte Perl till välstrukturerade (speciellt stora) program • På kursen lär vi oss inte Perl utan kommer bara använda en bråkdel för att illustrera principerna för CGI
…Perl... • Kort översikt • Kursboken kapitel 27 med OH-bilder • Se Perls hemsida: http://www.perl.com • Se också gärna den blixtnsnabba introduktionen (till främst syntaxen) som du hittar på följande adress (klicka på pilikonerna längs ner till vänster) • http://www.iupui.edu/npi/intro2perl/perl.html • Exempel • Se nästa oh-sidas rekommenderade referenser samt exemplen på kursens sidor (http://www.nada.kth.se/kurser/kth/2D4334/00-01/contents/CGI/examples.html)
…Perl några referenser • Home page • http://www.perl.com/perl/index.html • Tutorial • http://agora.leeds.ac.uk/Perl/start.html
Forms, CGI och Perl • Ett enkelt exempel med HTML-kod med inmatning i ett textfält • Data skickas till Perlprogram då knappen trycks <FORM ACTION="test.pl" METHOD="GET"> Skriv meddelande: <INPUT TYPE="text" NAME="message" SIZE=20 MAXLENGTH=40 VALUE=""> <INPUT TYPE ="submit" VALUE="Logga in"> <INPUT TYPE="reset" VALUE="Rensa inmatad information"> </FORM> En form kopplad till test.pl. Vi använder GET Ett inmatningsfält som vi ger namnet message En knapp för att skicka data En knapp för att rensa inmatad information
... Det är Perl! Skalära variabler skall börja med $ #!/usr/local/bin/perl print "Content-type: text/html\n\n"; $REQUEST_METHOD = $ENV{'REQUEST_METHOD'}; $QUERY_STRING = $ENV{'QUERY_STRING'}; if($REQUEST_METHOD ne "GET") { print "Tyvärr jag klarar bara av <CODE>GET</CODE><P>Hej då!"; exit(0); } ($COMMAND, $MESSAGE) = split(/=/, $QUERY_STRING); if($COMMAND eq "message") { print "<H1>Du skickade följande</H1>"; print "Meddelande: $MESSAGE"; exit(0); } exit(0); Vi skickar HTML Funktionen $ENV kan användas för att läsa omgivningsvariabler Metod som användes för att skicka data (GET eller POST), samt medskickade data Dela upp kommandosträngen den skall ju se ut så här kommando=argument Vi hanterar bara GET är den okey så skickar vi tillbaks lite info Vi ekar bla det inskickade meddelandet
... ett exempel • Placera Perlfilen i din CGI-bin-katalog • Testa först från terminal så att uppenbara fel (syntaxfel osv) är eliminerade • Se till att filens rättigheter är riktiga • Publicera din HTML-sida • Se till att hela sökvägen till samt namnet på filen är riktigt i ACTION-fältet • Testa!
Cookies • Cookies låter program på servern spara enkel information hos klienten • Syntax Set-Cookie: cookieNamn=cookieVärde • Denna information skickas med i ”huvudet” vid vid nedladdningen av en sida via HTTP, i stil med (mer om HTTP-formatet på föreläsning 8) HTTP/1.0 200 Document follows Date: Fri, 17 Nov 2000 9:45:20 GMT Server: NCSA/1.5.2 Content-type: text/plain Set-Cookie: lastSubmittedLab=lab2;expires=Friday, 15-Jan-01 23:59:59 Resten av HTML-sidan
... • Programmet på servern kan sedan uppdatera cookiens information genom att ange nytt värde • Ett program på servern kan också definiera flera cookies • Cookies lagras på klientsidan • Tex i katalogen (Windows-98) C:\WINDOWS\Cookies • Från klienten skickas alla cookies som hör till en viss URL över vid kontakt med just den URLen • Dvs en viss site får bara se sina egna cookies
... Cookies • Vid skapande av Cookie kan man ange: • Sistadatum (expires) • När ska cookien tas bort • Om detta inte anges överlever cookien bara aktuell session • Katalog (path) • Vilka underliggande ”websidor” skall få reda på cookien • Domän (domain) • Vilka domäner skall få cookien • Gör att man kan dela på cookies mellan domäner • Säkerhet (secure) • Om Cookien bara ska skickas över ”säkra länkar”