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