![]() Perl kalbos pamokėlės
CGI.pm biblioteka: sausainiai
Pastaba: šiame tekste naudojame objektiškai orientuotas programavimo būdą (kitas funkcinis). Todėl pradžioje turime sukurti CGI objektą, pvz., use CGI; $cgi = new CGI; HTTP protokolas pačia prigimtimi neišsaugo būsenų, todėl reikia mechanizmą išsaugoti tarp transakcijų. Tai galima padaryti keliais būdais, tačiau plačiausiai naudojamas ir aiškiausias yra "sausainiukų" (cookies) panaudojimas. Iš principo, "sausainis" yra vardo ir reikšmės pora, kuri saugoma tekstinėje byloje naršytojo kompiuteryje. Šie "sausainiai" perduodami tarnybiniai stočiai HTTP antraštėje. CGI.pm pateikia paprastą funkcijų rinkinį "sausainių" priskyrimui ir nuskaitymui. Pateiksime paprasčiausią "sausainio" įrašymo pavyzdį: $sausainis = $cgi->cookie( -name=>'pastaba', -value=>'Nauja pastaba.'); print $cgi-header(-cookie=>$sausainis); Bus sukurta tokia eilutė, parodanti bendrąjį HTTP "sausainio" formatą: pastaba=Nauja%20pastaba.; path=/ Nesudėtinga paimti ir "sausainio" reikšmę: $pastabos_tekstas = $cgi->cookie('pastaba'); Jei iškviesime "cookie" metodą, nenurodę jokių parametrų, jis gražins visų skriptui perduotų "sausainių" sąrašą, pvz., @sausainiai = $cgi->cookie(); Yra keletas naudingų atributų, kuriuos galima priskirti "sausainiams". "domain" atributas leidžia priskirti svetainių domenus, su kuriomis bus naudojamas "sausainis". Įprasta "atmesti" subdomenus ir nurodyti tik aukščiausią lygį. Jei atributas nenurodomas, tai "sausainis" bus veiksnus tik tai tarnybinei stočiai, kurioje buvo sukurtas. Pavyzdys: $sausainis = $cgi->cookie(-domain=>'.lithuanian.net', -name=>'pastaba',-value=>'Nauja pastaba.'); Kaip matome, "cookie" metodui parametrai perduodami pagal vardą, jų požymiu yra minusas ('-') prieš vardą ir jų eilės tvarka nesvarbi. "path" atributas leidžia apriboti katalogus nurodant, kuriose jų šakose galima apdoroti "sausainius". Nenurodžius katalogo, "sausainį" gali naudoti visi skriptai. Pavyzdys: $sausainis = $cgi->cookie(-path=>'/cgi-bin/tools', -name=>'pastaba',-value=>'Nauja pastaba.'); Šiuo kreipiniu nurodoma, kad sukurtas sausainis bus apdorojamas tik tų skriptų, kurie yra /cgi-bin/tools ir gilesnio lygio kataloguose. "secure" atributas leidžia nurodyti, kad "sausainis" bus naudojamas tik saugiu sujungimu (pvz., SSL), pvz., $sausainis = $cgi->cookie(-secure=>1, -name=>'pastaba',-value=>'Nauja pastaba.'); "httponly" atributas leidžia nurodyti, kad "sausainis" gali būti pasiekiamas tik per HTTP užklausas. Jis tampa neprieinamas naudojant "JavaScript" ir taip apsisaugoma nuo XSS atakų. Vienok, šią galimybę užtikrina tik MS IE 6 SP 1 ir vėlesnės šios naršyklės versijos. Pvz., $sausainis = $cgi->cookie(-httponly=1,-secure=>1, -name=>'pastaba',-value=>'Nauja pastaba.'); Labai naudingas gali būti "expire" atributas, apibrėžiantis "sausainio" galiojimo laiką, pvz., nustatant devynių dienų galiojimo laikotarpį: $sausainis = $cgi->cookie(-expire=>'+9d', -domain=>'.lithuanian.net', -path=>'/cgi-bin/tools', -name=>'pastaba',-value=>'Nauja pastaba.', -secure=>0); Jei nenurodomas jokia "expire" reikšmė, "sausainis" galioja visam laikui. Tačiau galima netgi nurodyti galiojimo laiką "į praeitį", kas reiškia, kad "sausainis" iškart tampa nebegaliojančiu, pvz., $sausainis = $cgi->cookie(-expire=>'-1d', -name=>'pastaba',-value=>'Nauja pastaba.'); Tai atitinka tokį kreipinį: $sausainis = $cgi->cookie(-expire=>'now', -name=>'pastaba',-value=>'Nauja pastaba.'); "expire" atribute galima nurodyti kelis laiko matavimo vienetus: now iškart, s sekundėmis, m minutėmis, h valandomis, M mėnesiais, y metais, tiksliai nurodytą laiko momentą, pvz., $sausainis = $cgi->cookie(-expire=>'Monday, 13-Aug-2012 09:30:00 GMT', -name=>'pastaba',-value=>'Nauja pastaba.'); Galima sukurti ir bendrauti ne vieno, o kelių "sausainių" pagalba, pavyzdžiui, $s1 = $cgi->cookie(-name=>'vardas',-value=>'Jonas'); $s2 = $cgi->cookie(-name=>'amzius',-value=>'23'); print $cgi-header(-cookie=>$s1,-cookie=>$s2); Paskutinę eilutę galima perrašyti panaudojant masyvo elementą: print $cgi-header(-cookie=>[$s1, $s2]); Sausainyje galima įsiminti ne tik vieną reikšmę, bet ir masyvą, ar net asociatyvųjį masyvą, pvz., $sausainis = $cgi->cookie(-name=>'vaikai',-value=>\%vaiku_amzius); Jo reikšmes paimsime analogiškai: %vaiku_amzius = $cgi->cookie('vaikai'); Pavyzdys Išvardijami visi skriptui perduotų sausainių vardai (be reikšmių): #!/usr/bin/perl use CGI; $cgi = new CGI; print $cgi->header(-type=>'text/html; charset=windows-1257'); print $cgi->start_html(-title=>'Sausainių sąrašas'); @sausainiai = $cgi->cookie(); print "<P>Gauti sausainiai:<BR>\n"; for ($K=0; $K <= $#sausainiai; $K++) { print $sausainiai[$K]; print "<BR>\n"; } print $cgi->end_html(); Funkciškai orientuotas programavimo būdas CGI.pm numato du programavimo stilius: objektiškai orientuotą ir funkciškai orientuotą. Programuojant funkciškai orientuotu būdu, darbui su "sausainiais" naudojama CGI::Cookie sąsaja. Pateiksime paprastą pavyzdį, išsiunčiantį "sausainį", o taip pat pateikiantį visų gautų "sausainių" reikšmes (laikant, kad visos jos yra tik teksto eilutės): #!/usr/bin/perl USE CGI qw/:standard/; Use CGI::Cookie; my $sausainis = new CGI::Cookie(-name=>'pastaba',-value=>'Nauja pastaba.'); print header(-cookie=>$sausainis); print start_html(-title=>'Sausainių sąrašas'); my %sausainiai = fetch CGI::Cookie; foreach $vardas (keys %sausainiai) { print "$vardas=$sausainiai{$vardas} <BR>\n"; } print end_html(); Pastaba: Bendrasis CGI.pm aprašymas bus pateikiamas kitame puslapyje (ateityje). Ankstesnės "Advanced HTML" skyrelio temos:
| |