mirror of
https://github.com/php/doc-it.git
synced 2026-03-27 00:52:07 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/it/trunk@96984 c90b9560-bf6c-de11-be94-00142212c4b1
472 lines
16 KiB
XML
472 lines
16 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!-- EN-Revision: 1.2 Maintainer: penzo Status: ready -->
|
|
<reference id="ref.session">
|
|
<title>Funzioni di gestione della sessione</title>
|
|
<titleabbrev>Sessioni</titleabbrev>
|
|
|
|
<partintro>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
Se avete dimestichezza con la gestione delle sessioni di PHPLIB, noterete
|
|
che alcuni concetti sono simili al supporto dele sessioni in PHP.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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
|
|
<function>session_start</function> o implicitamente tramite
|
|
<function>session_register</function>) se uno specifico id di
|
|
sessione sia stato inviato con la richiesta. In questo caso , il
|
|
precedente ambiente salvato viene ricreato.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
La configurazione di <link
|
|
linkend="ini.track-vars"><literal>track_vars</literal></link> e
|
|
<link
|
|
linkend="ini.register-globals"><literal>register_globals</literal></link>
|
|
influenza come le variabili di sessione vengono memorizzate una e più volte.
|
|
</para>
|
|
|
|
<note>
|
|
<para>
|
|
In PHP 4.0.3, <link
|
|
linkend="ini.track-vars"><literal>track_vars</literal></link> è sempre
|
|
attiva.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
In PHP 4.1.0, <varname>$_SESSION</varname> è disponibile come variabile
|
|
globale proprio come <varname>$_POST</varname>,
|
|
<varname>$_GET</varname>, <varname>$_REQUEST</varname> e così via.
|
|
<varname>$HTTP_SESSION_VARS</varname> non è sempre globale,
|
|
<varname>$_SESSION</varname> lo è sempre. Per questo motivo,
|
|
<literal>global</literal> non dovrebbe essere usato per
|
|
<varname>$_SESSION</varname>.
|
|
</para>
|
|
</note>
|
|
|
|
<para>
|
|
Se <link
|
|
linkend="ini.track-vars"><literal>track_vars</literal></link> è
|
|
attiva e <link
|
|
linkend="ini.register-globals"><literal>register_globals</literal></link>
|
|
non è attiva, solo i membri dell'array associativo globale
|
|
<varname>$HTTP_SESSION_VARS</varname> possono essere registrati come
|
|
variabili di sessione.
|
|
Le variabili di sessione ripristinate saranno disponibili
|
|
nell'array <varname>$HTTP_SESSION_VARS</varname>.
|
|
<example>
|
|
<title>
|
|
Registrare una variabile con <link
|
|
linkend="ini.track-vars"><literal>track_vars</literal></link>
|
|
attiva
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
if (isset($HTTP_SESSION_VARS['count'])) {
|
|
$HTTP_SESSION_VARS['count']++;
|
|
}
|
|
else {
|
|
$HTTP_SESSION_VARS['count'] = 0;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
L'uso di <varname>$_SESSION</varname> (o
|
|
<varname>$HTTP_SESSION_VARS</varname> con PHP 4.0.6 o precedente) è
|
|
raccomandato per sicurezza e leegibilità del codice.Con
|
|
<varname>$_SESSION</varname> o
|
|
<varname>$HTTP_SESSION_VARS</varname>, 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.
|
|
<example>
|
|
<title>
|
|
Registrare una variabile con $_SESSION.
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
|
|
if (!isset($_SESSION['count'])) {
|
|
$_SESSION['count'] = 0;
|
|
} else {
|
|
$_SESSION['count']++;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<example>
|
|
<title>
|
|
Resettare una variabile con $_SESSION.
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
|
|
unset($_SESSION['count']);
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Se <link
|
|
linkend="ini.register-globals"><literal>register_globals</literal></link>
|
|
è 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
|
|
<varname>$HTTP_SESSION_VARS</varname>/<varname>$_SESSION</varname>
|
|
non ha bisogno di usare session_register().
|
|
<caution>
|
|
<para>
|
|
Se state usando
|
|
<varname>$HTTP_SESSION_VARS</varname>/<varname>$_SESSION</varname>
|
|
e <link
|
|
linkend="ini.register-globals"><literal>register_globals</literal></link> non
|
|
è attiva, non usate <function>session_register</function>,
|
|
<function>session_is_registered</function> e
|
|
<function>session_unregister</function>.
|
|
</para>
|
|
<para>
|
|
Se attivate <link
|
|
linkend="ini.register-globals"><literal>register_globals</literal></link>,
|
|
<function>session_unregister</function> dovrebbe essere usata dal momento in
|
|
cui le variabili di sessione vengono registrate come variabili globali
|
|
quando i dati di sessione vengono deserializzati.
|
|
Disattivare <link
|
|
linkend="ini.register-globals"><literal>register_globals</literal></link>
|
|
è raccomandato sia per motivi di sicurezza che di prestazione.
|
|
</para>
|
|
</caution>
|
|
<example>
|
|
<title>
|
|
Registrare una variabile con <link
|
|
linkend="ini.register-globals"><literal>register_globals</literal></link>
|
|
attiva
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
if (!session_is_registered('count')) {
|
|
session_register("count");
|
|
$count = 0;
|
|
}
|
|
else {
|
|
$count++;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Se entrambe <link
|
|
linkend="ini.track-vars"><literal>track_vars</literal></link> e
|
|
<link
|
|
linkend="ini.register-globals"><literal>register_globals</literal></link>
|
|
sono attivate, allora le variabili globali e le entrate di
|
|
<varname>$HTTP_SESSION_VARS</varname>/<varname>$_SESSION</varname>
|
|
riporteranno lo stesso valore per variabili già registrate.
|
|
</para>
|
|
<para>
|
|
Se l'utente usa session_register() pre registrare una variabile di sessione,
|
|
<varname>$HTTP_SESSION_VARS</varname>/<varname>$_SESSION</varname>
|
|
non avranno questa variabile nell'array fino a che non sarà caricata
|
|
dall'archivio di sessione.(i.e. fino alla prossima richiesta)
|
|
</para>
|
|
<para>
|
|
Ci sono due metodi per propagare l'id di sessione:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
I Cookies
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Un parametro dell'URL
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
PHP ha la capacità di farlo in modo trasparente quando compilato con
|
|
<link linkend="install.configure.enable-trans-sid">
|
|
<literal>--enable-trans-sid</literal></link>. 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
|
|
<literal>SID</literal> che è definita, se il client non ha mandato
|
|
il cookie appropriato. <literal>SID</literal> può avere la forma di
|
|
<literal>session_name=session_id</literal> o può essere una stringa vuota.
|
|
</para>
|
|
<para>
|
|
L'esempio seguente dimostra come registrare una variabile e come collegare
|
|
una pagina all'altra correttamente usando SID.
|
|
<example>
|
|
<title>Contare il numero di accessi di un singolo utente</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?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>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Il <literal><?=SID?></literal> non è necessario, se
|
|
<link linkend="install.configure.enable-trans-sid">
|
|
<literal>--enable-trans-sid</literal></link> è stato usato per compilare PHP.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</note>
|
|
<para>
|
|
Per implementare l'archiviazione in database , o qualsiasi altro metodo di archiviazione,
|
|
avete bisogno di usare <function>session_set_save_handler</function> per
|
|
creare un set di funzioni di archiviazione a livello utente.
|
|
</para>
|
|
<para>
|
|
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.
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.save_handler</literal> definisce il nome dell'handler
|
|
che è usato per archiviare e rilasciare i dati associati a una sessione.
|
|
Di default è
|
|
<literal>files</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.save_path</literal> 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 è <literal>/tmp</literal>. Se la profondità del percorso
|
|
<literal>session.save_path</literal> è più di 2,
|
|
l'accumulo (gc) non sarà effettuato.
|
|
</simpara>
|
|
<warning>
|
|
<para>
|
|
Se lasciate questo settato a directory leggibile da tutti , come
|
|
If you leave this set to a world-readable directory, such as
|
|
<filename>/tmp</filename> (il default), altri utenti sul
|
|
potrebbero essere in grado di dirottare le sessioni prendendo la
|
|
lista dei files in quella directory.
|
|
</para>
|
|
</warning>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.name</literal> specifica il nome della sessione
|
|
che è usata come nome del cookie. Dovrebbe contenere solo caratteri
|
|
alfanumerici. Di default è
|
|
<literal>PHPSESSID</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.auto_start</literal> specifica se il modulo di sessione
|
|
inizia una sessione automaticamente su richiesta iniziale.
|
|
Di default è <literal>0</literal> (disattivata).
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.cookie_lifetime</literal> 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 è
|
|
<literal>0</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.serialize_handler</literal> definisce il nome
|
|
dell'handler che è usato per serializzare/deserializzare
|
|
i dati. Al momento, un formato interno di PHP(nome
|
|
<literal>php</literal>) e WDDX è supportato (nome
|
|
<literal>wddx</literal>). WDDX è solo disponibile, se PHP è
|
|
compilato con <link linkend="ref.wddx">WDDX
|
|
support</link>. Il defailt è <literal>php</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.gc_probability</literal> specifica la
|
|
probabilità , in percentuale ,che la routine gc (garbage collection)
|
|
sia cominciata ad ogni richiesta in percentuale. Di default è <literal>1</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.gc_maxlifetime</literal> specifica il numero
|
|
di secondi dopo i quali i dati saranno considerati 'spazzatura' e
|
|
cancellati.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.referer_check</literal> 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.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.entropy_file</literal> dà un percorso a
|
|
una risorsa esterna (file) che sarà usata come una addizionale
|
|
sorgente entropica nella crazione dell'id di sessione. Esempi sono
|
|
<literal>/dev/random</literal> o
|
|
<literal>/dev/urandom</literal> che sono disponibili sulla maggior parte dei
|
|
sistemi Unix.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.entropy_length</literal> specifica il numero
|
|
di bytes che saranno letti dal file specificato
|
|
sopra. Di default è <literal>0</literal> (disattivato).
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.use_cookies</literal> specifica se il
|
|
modulo userà i cookies per archiviare l'id di sessione sul lato
|
|
client. Di default è <literal>1</literal> (attivo).
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.cookie_path</literal> specifica il percorso da stabilire
|
|
in session_cookie. Di default è <literal>/</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.cookie_domain</literal> specifica il dominio
|
|
settato in session_cookie. Di default è niente.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.cache_limiter</literal> specifica il metodo di controllo
|
|
della cache da usare per le pagine di sessione
|
|
(none/nocache/private/private_no_expire/public). Di default è
|
|
<literal>nocache</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.cache_expire</literal> specifica il tempo-di-vita ,
|
|
in minuti , delle pagine nella cache, questo non ha effetto sul
|
|
limitatore nocache. Di default è <literal>180</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.use_trans_sid</literal> specifica se il supporto sid trasparente
|
|
è attivato o no se attivato compilandolo con
|
|
<link linkend="install.configure.enable-trans-sid">
|
|
<literal>--enable-trans-sid</literal></link>.
|
|
Di default è <literal>1</literal> (attivo).
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>url_rewriter.tags</literal> specifica quali html tags sono
|
|
riscritti per includere l'id di sessione se il supporto sid trasparente è attivato.
|
|
Di default è <literal>a=href,area=href,frame=src,input=src,form=fakeentry</literal>
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
<note>
|
|
<para>
|
|
L'handling di sessione è stato aggiunto in PHP 4.0.
|
|
</para>
|
|
</note>
|
|
</para>
|
|
</partintro>
|
|
|
|
&reference.session.functions;
|
|
|
|
</reference>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"../../../manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|