PHP: Hypertext Preprocessor
Transcript
PHP: Hypertext Preprocessor
Corso di Laurea Specialistica in Ingegneria Informatica Corso di Linguaggi e Tecnologie Web A. A. 2011 - 2012 PHP: Hypertext Preprocessor Concetti di Base Floriano Scioscia, Eufemia Tinelli 1 Contenuti • Introduzione: caratteristiche del linguaggio ed installazione • Basi di PHP – Variabili – Array – Funzioni – Connessione a database – Gestione cookie e sessioni Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 2 PHP: Hypertext Preprocessor • PHP è un linguaggio di programmazione che consente di realizzare in modo semplice e rapido pagine web dinamiche • PHP è un linguaggio di server-side scripting – il codice PHP (script) è inserito in un documento HTML o XHTML – un interprete in esecuzione sul server esegue il codice PHP e produce la pagina da inviare al client • L'interprete PHP ha bisogno di un Web server dotato di supporto per PHP (e.g. Apache con modulo PHP) • Per facilitare la memorizzazione dei dati, può essere necessario un DBMS (MySQL, PostgreSQL, ADODB, etc) • Ci riferiremo alla versione corrente del linguaggio PHP, la 5 Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 3 Il successo di PHP … • Flickr (www.flickr.com) è gestito da Yahoo! ed è il sito di condivisione delle foto di maggior successo nel mondo (gestisce 10 milioni di utenti in centinaia di nazioni) • Implementazione: • Soluzione basata sulla replica asincrona (senza clustering) MySQL, c’è un singolo database master sempre corretto • Bilanciamento del traffico effettuato da un apparecchio progettato ad hoc: traffico UPDATE, INSERT, DELETE va solo sul master • Centinaia di server come front-end • Squid come cache di front-end Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 4 Il successo di PHP … • Wikipedia è un’enciclopedia (ancora indipendente) basata sul Web, multi lingua e libera, con contenuti scritti e mantenuti dai propri membri (da 20mila a 45mila richieste al secondo) • Implementazione: • Basata su MediaWiki: piattaforma PHP per la gestione dei contenuti (può usare diversi database) • Bilanciamento geografico del traffico: la risoluzione DNS di ognuno dei suoi host (en.wikipedia.org, fr.wikipedia.org,…) dipende dalla posizione geografica dei computer dell’utente • Linux Virtual Server (LVS) per il bilanciamento del carico • memcached: pool di circa 30 server con 2GB ognuno Æ >60GB totale di cache Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 5 Installare PHP - software autoinstallanti • Zend server ((http://www.zend.com/en/products/server-ce/index) ) – la versione gratuita (Disponibile per Windows, Linux e Mac OS X) è la community edition e permette l’installazione di PHP (5.2 e 5.3) su Apache o IIS, MySQL (solo su Windows e Mac OS X), Zend Java bridge, driver per Oracle, Zend Framework, Zend Optimizer+ e Zend Debugger. La gestione dello Zend Server e la configurazione di tutte le sue componenti avviene attraverso una comoda interfaccia web. • XAMPP (http://www.apachefriends.org/en/index.html) è una distribuzione gratuita di Apache 2.2, MySQL 5., PHP 5.3 e Perl 5.10 disponibile per Windows, Linux, Mac OS X e Solaris. • EasyPHP (http://www.easyphp.org/) è una distribuzione di PHP 5.3, Apache 2.2, MySQL 5.1 e PhpMyAdmin 3.3 per Windows. Attraverso un sistema di moduli è possibile installare facilmente anche le più diffuse applicazioni web, tra cui Joomla, Wordpress, Drupal, phpBB, ecc.. Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 6 Installare PHP su windows (1) • Scaricare la versione stabile corrente PHP 5.3.8 da http://php.net/downloads.php --> meglio non scaricare l’installer!! • Creare la cartella C:\php e scompattare al suo interno il contenuto del pacchetto scaricato • Cercare il file php.ini-development e rinominarlo con php.ini • Modifiche al file php.ini extension_dir = "./“ Æ extension_dir = "C:/php/ext" • Decommentare tutte le righe di interesse per esempio: ;extension=php_gd2.dll ;extension=php_mbstring.dll ;extension=php_mysql.dll ;extension=php_pgsql.dll • Aggiungere C:\php alla variabile di sistema PATH • Riavviare Windows Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 7 Installare PHP su windows (2) • Modificare il file httpd.conf nella cartella C:\Apache\conf • Decommentare la riga LoadModule rewrite_module modules/mod_rewrite.so • Aggiungere le seguenti righe #PHP5 LoadModule php5_module "C:/php/php5apache2_2.dll" PHPIniDir "C:/php" • Cercare la riga AddType application/x-gzip .gz .tgz e aggiungere le seguenti righe AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps • Sostituire la riga DirectoryIndex index.html con DirectoryIndex index.html index.php • Riavviare Apache Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 8 Verifica della corretta installazione • Scrivere in un file di testo la seguente riga <?php phpinfo(); ?> e salvare il file con nome info.php nella cartella htdocs di Apache • Aprire il browser e digitare il seguente indirizzo: http://localhost/info.php Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 9 Hello world PHP! hello.php <html> <head> <title>Hello world PHP</title> </head> <body> Il nostro primo documento PHP. <?php echo "Hello World PHP!"; ?> </bod> </htm> sorgente PHP Interprete PHPPHP output <html> <head> <title>Hello world PHP</title> </head> <body> Il nostro primo documento PHP. Hello World PHP! </body> </html> Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 10 Integrare PHP in HTML • PHP è un linguaggio HTML embedded, perché può essere incorporato in un documento HTML (o XHTML) • Tre modalità: 1. Processing instruction php (di gran lunga la modalità più comune) <?php echo "<h1>Hello world PHP!</h1>"; ?> 2. Tag script <script language="php"> echo "<h1>Hello world PHP!</h1>"; </script> 3. Tag in stile ASP (poco usato) <% echo "<h1>Hello world PHP!</h1>"; %> Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 11 Variabili • Il nome di una variabile deve obbligatoriamente iniziare con il simbolo $; e.g. $a, $A_1, $counter, $x1 • Al contrario di altri linguaggi (e.g. C, Java), per creare una variabile è sufficiente assegnarle un valore – Si parla, dunque, di dichiarazione implicita • Le variabili PHP non hanno alcun controllo di tipo – – – – Boolean: tipo logico, può assumere solo il valore true o false Integer: numero intero positivo o negativo Float: numero in virgola mobile String: sequenza di caratteri delimitata da ' ' oppure da " " • Una variabile può cambiare tipo durante l'esecuzione • Una variabile PHP può essere inserita in una stringa e valutata (e.g. $str = "Benvenuto $utente"; ) Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 12 Array • Un array in PHP può corrispondere – ad un vettore, cioè una struttura dati in cui ogni elemento è individuato da un indice numerico – ad una tabella di hash, cioè una collezione di coppie nome/valore (tale struttura dati è anche chiamata dizionario o array associativo) • Un array può essere creato esplicitamente con il costrutto array() oppure implicitamente // Questo è un array di numeri interi $pari = array( 2, 4, 6, 8, 10 ); // Questo è un array creato implicitamente $primi[0] = 2; $primi[1] = 3; // Questo è un array associativo $bookmark["username"] = "Pippo" $bookmark["userid"] = "123456" Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 13 Istruzioni e operatori • La sintassi di molte istruzioni PHP è uguale al linguaggio C – assegnazioni, blocchi di istruzioni, if, for, do ... while, while, switch ... case, break, continue, return • Anche la sintassi dei commenti e di quasi tutti gli operatori (aritmetici, logici, di confronto, etc.) è uguale al C • L'operatore . permette di concatenare due stringhe • Iterazioni sugli array foreach ($array as $key => $value) { echo "$key : $value <br/>"; } • Costrutto list() per l'assegnazione simultanea di più variabili $info = array( "alfa", "beta", "gamma" ); list($val1, $val2, $val3) = $info; Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 14 Dichiarazione di funzioni • Avviene tramite la parola chiave function function nome-funzione( ...parametri... ) { ... Istruzioni ... } /* Funzione somma */ function somma($a, $b) { return $a + $b; } • E' possibile indicare un valore predefinito per uno o più parametri: in tal caso la chiamata alla funzione può omettere il passaggio del parametro function saluta($utente, $msg = "Ciao") { return $msg . " " . $utente; } $s1 = saluta("Pippo","Salve"); // $s1 vale "Salve Pippo" $s2 = saluta("Pippo"); // $s2 vale "Ciao Pippo" Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 15 Funzioni principali – 1 • phpinfo() genera dinamicamente un documento contenente informazioni sulla versione di PHP installata e sull'ambiente di esecuzione – Può essere utile per controllare quali variabili predefinite sono messe a disposizione del programmatore dall'ambiente PHP • echo() scrive una stringa nel documento che viene inviato al client – può essere usata anche senza parentesi, essendo non una funzione vera e propria ma un costrutto del linguaggio PHP • exit() e die() arrestano l'esecuzione dello script e consentono la stampa di un messaggio facoltativo (può essere usata per segnalare un errore) Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 16 Funzioni principali – 2 • isset() controlla se la variabile contiene o no un valore • unset() cancella una variabile • isnull() verifica se la variabile è di tipo NULL • Il valore speciale NULL indica che una variabile non ha valore. Una variabile si considera NULL se: – le è stata assegnata la costante NULL – non le è stato ancora assegnato alcun valore – è stata cancellata mediante la funzione unset() Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 17 Visibilità delle variabili • Le variabili globali sono quelle definite all'esterno di una funzione, nella parte principale dello script • Le variabili locali sono quelle definite all’interno di una funzione • Per accedere ad una variabile globale dall'interno di una funzione bisogna dichiararla esplicitamente mediante la parola chiave global /** $base e' una variabile globale */ $base = 14; function normalizza( $val ) { // si dichiara di utilizzare una variabile globale global $base; return $val/$base; } Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 18 La variabile $GLOBALS • In alternativa all'uso di global è possibile accedere ad una variabile globale dall'interno di una funzione utilizzando l'array associativo $GLOBALS /** $base e' una variabile globale */ $base = 14; function normalizza( $val ) { return $val/$GLOBALS["base"]; } Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 19 Inclusione di file esterni • PHP consente di includere ed eseguire degli script contenuti in file esterni. Essi potranno essere dei frammenti di HTML o una libreria PHP. Due primitive: – include: include un file generando un warning se non è disponibile – require: include un file generando un errore (e quindi bloccando l’esecuzione) se non è disponibile /* Inclusione di una libreria */ include("libreria.php"); • Le primitive include_once e require_once evitano di includere un file se è già stato incluso dal documento corrente, evitando così errori dovuti alla doppia dichiarazione di funzioni Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 20 Variabili predefinite – 1 • Esistono alcune variabili automaticamente definite dall'interprete PHP e quindi disponibili in ogni script • $_SERVER: array associativo che contiene informazioni fornite dal web server all'interprete PHP, tra cui – – – – – "PHP_SELF": nome dello script PHP in esecuzione "SERVER_NAME": hostname del server "SERVER_ADDR": indirizzo IP del server "REMOTE_ADDR": indirizzo IP del client informazioni contenute nell'header della richiesta HTTP del client, ad esempio • "HTTP_USER_AGENT": user agent (browser) usato dal client • "HTTP_REFERER": URL della pagina che ha portato il client alla pagina corrente Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 21 Variabili predefinite – 2 • $_SESSION: array associativo che contiene informazioni sulle sessioni • $_COOKIE: array associativo contenente le variabili passate allo script tramite i cookie HTTP • $_GET: array associativo contenente le variabili passate dal client tramite il metodo GET • $_POST: come sopra, ma riferito al metodo POST • E' da ricordare che queste variabili sono disponibili solo se è stato abilitato il tracking delle variabili nel file di configurazione php.ini (track_vars=On) oppure all'interno dello script con la direttiva "php_track_vars" Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 22 Uso dei form • Il programmatore usando le variabili $_GET o $_POST può accedere ai dati inviati allo script mediante il metodo corrispondente • A seconda delle impostazioni del modulo PHP, l’interprete può rendere tali valori immediatamente disponibili nello script di destinazione sotto forma di variabili globali. • extract_globals() genera delle variabili globali, contenenti i dati inviati dal client via GET o POST, che hanno lo stesso nome impostato nel form Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 23 Uso dei form - POST <form name="form1" method="post" action="prova.php"> <p>Inserisci il tuo nome: </p> <p> <input type="text" name="nome_utente"> <input type="submit" value="Invia"> </p> </form> prova.php <?php echo('Il tuo nome è ' . $_POST['nome_utente']); ?> Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 24 Uso dei form - GET • Ipotizzando che l'utente abbia immesso i dati tramite il seguente form HTML <form method="get" action="http://www.example.com/a.php"> <br/><label for="nome">Nome:</label> <input type="text" name="nome" /> <br/><label for="cognome">Cognome:</label> <input type="text" name="cognome" /> <br/><input type="submit" name="submit" value="OK" /> <input type="reset" name="cancel" value="Annulla" /> </form> l'URI di destinazione è del tipo http://www.example.com/a.php?nome=Pinco&cognome=Pallino a.php ... <?php echo('Benvenuto ' . $_GET["nome"] . ' ' . $_GET["cognome"]) ?> ... e si ha risorsa inviata ... Benvenuto Pinco Pallino ... Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 25 Codifica dei dati • Le funzioni urlencode() e urldecode() rispettivamente codificano e decodificano le sequenze di escape • Le funzioni htmlentities() e html_entities_decode() rispettivamente codificano una stringa come entità HTML e decodificano una stringa riottenendo il testo originale Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 26 Connessione ad un DBMS • L’accesso ad un DBMS avviene in tre fasi: 1. Autenticazione: Si effettua l’autenticazione al DBMS mediante delle credenziali di accesso. Se questa operazione termina con successo, viene instaurata una connessione con il DBMS 2. Comunicazione: Si effettuano una o più operazioni con il DBMS, mediante l’esecuzione di statement SQL. In generale il primo passo della comunicazione prevede la selezione del database 3. Rilascio connessione: Si rilasciano le risorse allocate e si chiude la comunicazione con il DBMS Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 27 Autenticazione ad un DBMS (MySQL) • Le informazioni di cui bisogna disporre sono: – il nome dell'host su cui è in esecuzione il DBMS server – le credenziali di accesso al DBMS – il nome del database da utilizzare $dbhost $dbuser $dbpass $dbname = = = = "localhost"; "admin"; "secret"; "test"; // // // // Host su cui è in esecuzione MySQL Il nome utente (username) La nostra password Il nome del database da usare // Instaurazione della connessione $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die("Impossibile collegarsi al server MySQL. Assicurarsi di possedere i diritti necessari."); // Scelta del database mysql_select_db($dbname, $conn) or die("Impossibile accedere al DB. Assicurarsi di possedere i diritti necessari."); Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 28 Comunicazione con il DBMS (MySQL) • L’interazione col DB avviene mediante istruzioni SQL. In particolare è possibile effettuare: – query di inserimento/aggiornamento – query di selezione • Per gestire eventuali situazioni di errore è possibile far precedere il comando dal carattere @. In questo modo non sarà terminata l’esecuzione, ma sarà possibile riconoscere l’errore mediante opportune funzioni (per MySQL possono essere usate le funzioni mysql_errno() e mysql_error() ) Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 29 Query di creazione (MySQL) • La funzione mysql_query() invia al DBMS una query in SQL, passata come variabile stringa $sql = "CREATE TABLE impiegati( id int PRIMARY KEY AUTO_INCREMENT, nome varchar(40), cognome varchar(40), stipendio int )"; $result = mysql_query( $sql, $conn ) or die( "Errore: " . mysql_error() ); Ipotizzando di aver ricevuto i dati attraverso un form con metodo HTTP POST: $nome = $_POST["nome"]; $cognome = $_POST["cognome"]; $stip = $_POST["stipendio"]; $sql = "INSERT INTO impiegati(nome, cognome, stipendio) VALUES ( $nome, $cognome, $stip )"; $result = mysql_query( $sql, $conn ) or die( "Errore: " . mysql_error() ); Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 30 Query di aggiornamento (MySQL) • La funzione mysql_affected_rows() restituisce il numero di tuple modificate dall'ultima query di aggiornamento inviata al DBMS $sql = "UPDATE impiegati SET nome='Mario' WHERE cognome='Rossi'"; $result = mysql_query( $sql, $conn ) or die( "Errore: " . mysql_error() ); $num = mysql_affected_rows(); echo "Modificate $num righe"; Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 31 Query di selezione (MySQL) – 1 • Per inviare la query si usa sempre mysql_query() • La funzione mysql_rows() restituisce il numero di tuple selezionate dall'ultima query inviate al DBMS • mysql_fetch_assoc() restituisce il risultato di una query di selezione, una tupla alla volta, sotto forma di un array associativo costituito da coppie campo-valore* • mysql_fetch_row() restituisce invece la prossima tupla del risultato della query sotto forma di insieme dei valori dei campi*, assegnabili ad un insieme di variabili in un'unica istruzione con il costrutto list *nell'ordine specificato dalla query Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 32 Query di selezione (MySQL) – 2 rubrica id 1 2 3 4 nome Giulio Massimo Giorgio Sergio cognome Chierchini De Vita Cavazzano Asteriti telefono 12345 45678 98765 34567 La rubrica contiene 4 numeri Id Nome Cognome Tel. 4 Sergio Asteriti 34567 3 Giorgio Cavazzano 98765 1 Giulio Chierchini 12345 2 Massimo De Vita 45678 // Query $sql = "SELECT * FROM rubrica ORDER BY cognome, nome"; $result = mysql_query( $sql, $conn ) or die( "Errore: " . mysql_error() ); // Creiamo una tabella: in testa il numero di tuple $num = mysql_num_rows(); echo "La rubrica contiene $num numeri<br/> <pre>Id \t Nome \t Cognome \t Tel. \n"; // Prendiamo una tupla alla volta e stampiamo i valori in una riga della tabella while ($data = mysql_fetch_assoc($result)){ foreach ($data as $key => $value){ echo "$value \t"; } echo "\n"; } echo "</pre>"; Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 33 Query di selezione (MySQL) – 3 <table> <tr> <th>Cognome</th> <th>Stipendio</th> </tr> <?php $result = mysql_query( "SELECT id, cognome, stipendio FROM impiegati", $conn ); while(list($id,$cogn,$stip) = mysql_fetch_row($result)) { echo ("<tr> <td><a href=\"info.php?id=$id\"> $cogn</a></td> <td>$stip</td> </tr>\n"); } ?> </table> Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 34 Query di selezione (MySQL) – 3 <table> <tr> <th>Cognome</th> <th>Stipendio</th> </tr> <?php $result = mysql_query( "SELECT id, cognome, stipendio FROM impiegati", $conn ); while(list($id,$cogn,$stip) = mysql_fetch_row($result)) { echo ("<tr> <td><a href=\"info.php?id=$id\"> $cogn</a></td> <td>$stip</td> </tr>\n"); } ?> </table> Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 35 Rilascio della connessione • Il rilascio della connessione avviene mediante la primitiva mysql_close • Tutte le connessioni lasciate aperte vengono chiuse automaticamente alla fine dello script // Rilascio della connessione mysql_close($conn); Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 36 Query di selezione (PostgreSQL) – Popolare un menu <?php $con = pg_connect("host=localhost port=5432 dbname=geo user=postgres password=postgres"); $query="SELECT id, name FROM geo_table ORDER BY name"; $res = pg_query($query); if ($res && pg_num_rows($res)>0){ ?> <select name="regioni"> <option value="">Scegli una regione</option> <?php while($row=pg_fetch_assoc($res)){ ?> <option value="<?php echo $row[‘id']?>"><?php echo $row[‘name’]?></option> <?php } pg_close($con); ?> </select> <?php } ?> Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 37 Cookie • I cookie sono un meccanismo mediante il quale un'applicazione web può profilare l’utente, memorizzando delle informazioni sul client (il browser) Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 38 Uso dei cookie – 1 • Tutte le operazioni di scrittura, modifica o cancellazione di cookie in PHP avvengono mediante una stessa funzione, setcookie( nome [, valore, scadenza] ) • Tale funzione deve essere invocata prima che qualsiasi contenuto venga inviato al browser, poichè i cookie vengono trasmessi al client all’interno dell’header della risposta HTTP • Il programmatore può accedere ai cookie inviati dal client usando la variabile $_COOKIE Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 39 Uso dei cookie – 2 <?php if (isset($_COOKIE["ultimavisita"])) { $ult = $_COOKIE["ultimavisita"] // Stampo la data dell'ultima visita echo "L'ultima volta sei stato qui il " echo date("d/m/Y", $ult); echo " alle ore " . date( "H:i:s.", $ult ); echo "<a href=\"cancella.php\">Cancella il cookie</a>"; } else { echo "Non sei mai stato qui prima?"; } ?> • Per eliminare un cookie basta resettare il suo valore <?php // file 'cancella.php' setcookie("ultimavisita", ""); ?> Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 40 Sessioni • Una sessione è un arco di tempo in cui viene monitorata la connessione di un utente, mantenendo traccia di alcune informazioni tra accessi HTTP consecutivi: esse costituiscono lo stato della sessione • Ogni sessione è associata ad un identificativo univoco, generato quando si dà inizio alla sessione • In un'applicazione web in PHP, l'identificativo di sessione è solitamente conservato nella variabile PHPSESSID Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 41 Esempio di sessione Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 42 Gestione delle sessioni • session_start() è invocata per creare una nuova sessione (o per ripristinarla, nel caso sia stata creata in precedenza). Questa funzione tenta anche di impostare, nel browser, un cookie contenente l'identificativo di sessione, per cui è necessario che venga invocata all'inizio dello script • session_register() è usata per registrare le variabili di sessione. A tal scopo è possibile usare l’array associativo globale $_SESSION • session_destroy() è usata per terminare la sessione eliminando i dati memorizzati, tipicamente al momento del log out Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 43 Riferimenti • Gruppo di Documentazione PHP, PHP Manual, http://www.php.net/manual/en/, 1997-2008 • T. Converse, J. Park, Guida a PHP 2/ed - Handbook, Mc-Graw Hill, 2004 • E. L. Thompson, S. D. Nowicki, T. Myer, PHP6 - Guida per lo sviluppatore, Hoepli, 2009 • P. B. MacIntyre, PHP – Le tecniche per scrivere il codice migliore, Hops, 2010. Floriano Scioscia, Eufemia Tinelli - LTW A.A. 20112011-2012 44