1
0
mirror of https://github.com/php/doc-it.git synced 2026-03-27 00:52:07 +01:00
Files
archived-doc-it/reference/session/reference.xml
Simone Cortesi 7113cbba85 huge typo
git-svn-id: https://svn.php.net/repository/phpdoc/it/trunk@96984 c90b9560-bf6c-de11-be94-00142212c4b1
2002-09-26 11:16:42 +00:00

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>&lt;?=SID?&gt;</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
-->