Il supporto delle sessioni in PHP consiste nel mantenere certi dati
attraverso accessi successivi.Questo vi d� la capacit� di costruire
applicazioni pi� consone alle vostre esigenze e di accrescere le qualit�
del vostro sito web.
Se avete dimestichezza con la gestione delle sessioni di PHPLIB, noterete
che alcuni concetti sono simili al supporto dele sessioni in PHP.
Al visitatore che accede al vostro sito web viene assegnato un id unico,
il cosidetto id di sessione. Questo viene registrato in un cookie sul
lato utente o � propagato tramite l'URL.
Il supporto delle sessioni vi permette di registrare numeri arbitrari di
variabili che vengono preservate secondo richiesta.Quando un visitatore
accede al vostro sito, PHP controller� automaticamente (se session.auto_start �
settato a 1) o su vostra richiesta (esplicitamente tramite
session_start() o implicitamente tramite
session_register()) se uno specifico id di
sessione sia stato inviato con la richiesta. In questo caso , il
precedente ambiente salvato viene ricreato.
Tutte le variabili registrate vengono serializzate dopo che la richiesta
� finita. Le variabili registrate che non sono definite vengono marcate
come indefinite. All'accesso successivo, queste non vengono definite
dal modulo di sessione fino a quando l'utente non le definisce pi� tardi.
La configurazione di track_vars e
register_globals
influenza come le variabili di sessione vengono memorizzate una e pi� volte.
Nota:
In PHP 4.1.0, $_SESSION � disponibile come variabile
globale proprio come $_POST,
$_GET, $_REQUEST e cos� via.
$HTTP_SESSION_VARS non � sempre globale,
$_SESSION lo � sempre. Per questo motivo,
global non dovrebbe essere usato per
$_SESSION.
Se track_vars �
attiva e register_globals
non � attiva, solo i membri dell'array associativo globale
$HTTP_SESSION_VARS possono essere registrati come
variabili di sessione.
Le variabili di sessione ripristinate saranno disponibili
nell'array $HTTP_SESSION_VARS.
Esempio 1.
Registrare una variabile con track_vars
attiva
<?php if (isset($HTTP_SESSION_VARS['count'])) { $HTTP_SESSION_VARS['count']++; } else { $HTTP_SESSION_VARS['count'] = 0; } ?>
|
|
L'uso di $_SESSION (o
$HTTP_SESSION_VARS con PHP 4.0.6 o precedente) �
raccomandato per sicurezza e leegibilit� del codice.Con
$_SESSION o
$HTTP_SESSION_VARS, non c'� bisogno di usare le funzioni
session_register()/session_unregister()/session_is_registered().
Gli utenti possono accedere alla variabile di sessione come a una
variabile normale.
Esempio 2.
Registrare una variabile con $_SESSION.
<?php // Use $HTTP_SESSION_VARS with PHP 4.0.6 or less if (!isset($_SESSION['count'])) { $_SESSION['count'] = 0; } else { $_SESSION['count']++; } ?>
|
|
Esempio 3.
Resettare una variabile con $_SESSION.
<?php // Use $HTTP_SESSION_VARS with PHP 4.0.6 or less unset($_SESSION['count']);
?>
|
|
Se register_globals
� attiva, allora tutte le variabili globali possono essere registrate
come variabili di sessione e le variabili di sessione saranno ripristinate
in corrispondenza delle variabili globali.
Dal momento che PHP ha bisogno di sapere quali variabili globali sono
registrate come variabili di sessione , gli utenti devono registrare le
variabili con la funzione session_register() mentre
$HTTP_SESSION_VARS/$_SESSION
non ha bisogno di usare session_register().
Esempio 4.
Registrare una variabile con register_globals
attiva
<?php if (!session_is_registered('count')) { session_register("count"); $count = 0; } else { $count++; } ?>
|
|
Se entrambe track_vars e
register_globals
sono attivate, allora le variabili globali e le entrate di
$HTTP_SESSION_VARS/$_SESSION
riporteranno lo stesso valore per variabili gi� registrate.
Se l'utente usa session_register() pre registrare una variabile di sessione,
$HTTP_SESSION_VARS/$_SESSION
non avranno questa variabile nell'array fino a che non sar� caricata
dall'archivio di sessione.(i.e. fino alla prossima richiesta)
Ci sono due metodi per propagare l'id di sessione:
I Cookies
Un parametro dell'URL
Il modulo di sessione supporta entrambi i metodi. I cookies sono ottimi,
ma dal momento che possono non essere a disposizione (i clients non sono
costretti ad accettarli ), non possiamo dipendere da questi.
Il secondo metodo incorpora l'id di sessione direttamente negli URL.
PHP ha la capacit� di farlo in modo trasparente quando compilato con
--enable-trans-sid. Se attivate questa opzione,
gli URL relativi saranno modificati per contenere l'id di sessione
automaticamente. In alternativa, potete usare la costante
Alternatively, you can use the constant
SID che � definita, se il client non ha mandato
il cookie appropriato. SID pu� avere la forma di
session_name=session_id o pu� essere una stringa vuota.
L'esempio seguente dimostra come registrare una variabile e come collegare
una pagina all'altra correttamente usando SID.
Esempio 5. Contare il numero di accessi di un singolo utente
<?php if (!session_is_registered('count')) { session_register('count'); $count = 1; } else { $count++; } ?>
Salve visitatore , hai visitato questa pagina <?php echo $count; ?> times.<p>;
<?php # il <?php echo SID?> (<?=SID?> pu� essere usato se short tag � attivo) # � necessario per preservare l'id di sessione # nel caso incui l'utente abbia disattivato i cookies ?>
Per continuare, <A HREF="nextpage.php?<?php echo SID?>">clicca qui</A>
|
|
Il <?=SID?> non � necessario, se
--enable-trans-sid � stato usato per compilare PHP.
Nota:
Gli URL non relativi si presume che puntino a siti esterni e quindi
non hanno il SID , perch� sarebbe rischioso per la sicurezza propagare
il SID a un altro server.
Per implementare l'archiviazione in database , o qualsiasi altro metodo di archiviazione,
avete bisogno di usare session_set_save_handler() per
creare un set di funzioni di archiviazione a livello utente.
Il sistema di gestione delle sessioni supporta un numero di opzioni di configurazione
che potete posizionare nel vostro file php.ini. Ne daremo una breve
spiegazione.
session.save_handler definisce il nome dell'handler
che � usato per archiviare e rilasciare i dati associati a una sessione.
Di default �
files.
session.save_path definisce l'argomento che
� passato all'handler di sessione. Se scegliete handler files di default ,
questo � il percorso dove i files vengono creati.
Di default � /tmp. Se la profondit� del percorso
session.save_path � pi� di 2,
l'accumulo (gc) non sar� effettuato.
Avvertimento |
Se lasciate questo settato a directory leggibile da tutti , come
If you leave this set to a world-readable directory, such as
/tmp (il default), altri utenti sul
potrebbero essere in grado di dirottare le sessioni prendendo la
lista dei files in quella directory.
|
session.name specifica il nome della sessione
che � usata come nome del cookie. Dovrebbe contenere solo caratteri
alfanumerici. Di default �
PHPSESSID.
session.auto_start specifica se il modulo di sessione
inizia una sessione automaticamente su richiesta iniziale.
Di default � 0 (disattivata).
session.cookie_lifetime specifica il tempo di vita insecondi
del cookie che viene mandato al browser. Il valore 0 significa
"fino a che il browser viene chiuso". Di default �
0.
session.serialize_handler definisce il nome
dell'handler che � usato per serializzare/deserializzare
i dati. Al momento, un formato interno di PHP(nome
php) e WDDX � supportato (nome
wddx). WDDX � solo disponibile, se PHP �
compilato con WDDX
support. Il defailt � php.
session.gc_probability specifica la
probabilit� , in percentuale ,che la routine gc (garbage collection)
sia cominciata ad ogni richiesta in percentuale. Di default � 1.
session.gc_maxlifetime specifica il numero
di secondi dopo i quali i dati saranno considerati 'spazzatura' e
cancellati.
session.referer_check contiene la sottostringa
con cui volete controllare ogni HTTP referer. Se il referer � stato mandato dal client
e la sottostringa non � stata trovata, l'id incorporato nella sessione verr�
marcato come non valido. Il default � una stringa vuota.
session.entropy_file d� un percorso a
una risorsa esterna (file) che sar� usata come una addizionale
sorgente entropica nella crazione dell'id di sessione. Esempi sono
/dev/random o
/dev/urandom che sono disponibili sulla maggior parte dei
sistemi Unix.
session.entropy_length specifica il numero
di bytes che saranno letti dal file specificato
sopra. Di default � 0 (disattivato).
session.use_cookies specifica se il
modulo user� i cookies per archiviare l'id di sessione sul lato
client. Di default � 1 (attivo).
session.cookie_path specifica il percorso da stabilire
in session_cookie. Di default � /.
session.cookie_domain specifica il dominio
settato in session_cookie. Di default � niente.
session.cache_limiter specifica il metodo di controllo
della cache da usare per le pagine di sessione
(none/nocache/private/private_no_expire/public). Di default �
nocache.
session.cache_expire specifica il tempo-di-vita ,
in minuti , delle pagine nella cache, questo non ha effetto sul
limitatore nocache. Di default � 180.
session.use_trans_sid specifica se il supporto sid trasparente
� attivato o no se attivato compilandolo con
--enable-trans-sid.
Di default � 1 (attivo).
url_rewriter.tags specifica quali html tags sono
riscritti per includere l'id di sessione se il supporto sid trasparente � attivato.
Di default � a=href,area=href,frame=src,input=src,form=fakeentry
Nota:
L'handling di sessione � stato aggiunto in PHP 4.0.