<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hello World: &#187; autenticazione</title>
	<atom:link href="http://razorblade.netsons.org/tag/autenticazione/feed/" rel="self" type="application/rss+xml" />
	<link>http://razorblade.netsons.org</link>
	<description>Programmazione web e oltre: php5, Zend Framework, jQuery, Actionscript 3.0, Sandy 3D Engine e altro</description>
	<lastBuildDate>Fri, 28 Aug 2009 18:23:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Costruire un’applicazione reale con Zend Framework ( parte 8 )</title>
		<link>http://razorblade.netsons.org/2008/09/13/costruire-un%e2%80%99applicazione-reale-con-zend-framework-parte-8/</link>
		<comments>http://razorblade.netsons.org/2008/09/13/costruire-un%e2%80%99applicazione-reale-con-zend-framework-parte-8/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 13:59:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[applicazione con zend framework]]></category>
		<category><![CDATA[autenticazione]]></category>
		<category><![CDATA[authAdapter]]></category>
		<category><![CDATA[AuthController]]></category>
		<category><![CDATA[identifyAction]]></category>
		<category><![CDATA[linkTo view helper]]></category>
		<category><![CDATA[LoggedInUser view helper]]></category>
		<category><![CDATA[loginAction]]></category>
		<category><![CDATA[Zend FlashMessenger]]></category>
		<category><![CDATA[zend login]]></category>
		<category><![CDATA[Zend_Filter]]></category>
		<category><![CDATA[Zend_Filter_StringTrim]]></category>
		<category><![CDATA[Zend_Filter_StripTags]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://razorblade.netsons.org/?p=31</guid>
		<description><![CDATA[<h2>Autenticazione</h2>
<p>L'autenticazione è il processo in cui bisogna capire se qualcuno è realmente chi dice di essere. Per identificare l'individuo, solitamente si usa l'accoppiata username e password. Altri metodi di autenticazione sono esistenti, ad esempio, quando si paga in un negozio con la carta di credito, l'username è sostituito dal possesso materiale della carta di credito, altri metodi potrebbero essere la lettura delle impronte digitali ecc..</p>

<p>In <b>Zend Framework</b> il processo di autenticazione è gestito da un oggetto <a href="http://razorblade.netsons.org/2008/09/13/costruire-un%e2%80%99applicazione-reale-con-zend-framework-parte-8/">[...] Continua</a></p>


Related posts:<ol><li><a href='http://razorblade.netsons.org/2008/11/30/zend-framework-introduzione-al-componente-zend_form/' rel='bookmark' title='Permanent Link: Zend Framework: introduzione al componente Zend_Form'>Zend Framework: introduzione al componente Zend_Form</a> <small>Creare form web con Zend Form Con Zend Framework possiamo...</small></li><li><a href='http://razorblade.netsons.org/2009/02/02/zend-framework-gestione-dei-moduli-ed-esempio-modulo-di-amministrazione/' rel='bookmark' title='Permanent Link: Zend Framework: gestione dei moduli ed esempio modulo di amministrazione'>Zend Framework: gestione dei moduli ed esempio modulo di amministrazione</a> <small>Come usare Zend_Layout per la gestione dei moduli In quest'articolo...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<h2>Autenticazione</h2>
<p>L&#8217;autenticazione è il processo in cui bisogna capire se qualcuno è realmente chi dice di essere. Per identificare l&#8217;individuo, solitamente si usa l&#8217;accoppiata username e password. Altri metodi di autenticazione sono esistenti, ad esempio, quando si paga in un negozio con la carta di credito, l&#8217;username è sostituito dal possesso materiale della carta di credito, altri metodi potrebbero essere la lettura delle impronte digitali ecc..</p>
<p>In <b>Zend Framework</b> il processo di autenticazione è gestito da un oggetto, <b>Zend_Auth</b>. In questo articolo, procederemo a creare un nuovo controller, <b>AuthController</b> e la sua rispettiva view, che visualizzerà il form per l&#8217;inserimento di username e password ed eventualmente dei messaggi di errore.</p>
</p>
<p><b>AuthController.php</b></p>
<pre name='code' class='php'>
< ?php

  class AuthController extends Zend_Controller_Action
  {
    public function init(){
      $response = $this->getResponse();
      $response->insert('header', $this->view->render('header.phtml'));
      $response->insert('menu', $this->view->render('menu.phtml'));
      $response->insert('columnLeft', $this->view->render('columnLeft.phtml'));
      $response->insert('columnRight', $this->view->render('columnRight.phtml'));
      $response->insert('footer', $this->view->render('footer.phtml'));
    }

    public function indexAction() {
      $this->_forward('login');
    } 

    public function loginAction() {
      $auth = Zend_Auth::getInstance();
      if ($auth->hasIdentity()) {
        $this->_redirect('/');
      }
      $flashMessenger = $this->_helper->FlashMessenger;
      $flashMessenger->setNamespace('actionErrors');
      $this->view->actionErrors = $flashMessenger->getMessages();
    }

    public function identifyAction(){
      $success = false;
      $message = '';
      if ($this->_request->isPost()){
        $formData = $this->_getFormData();

        if (empty($formData['username']) || empty($formData['password'])){
          $message = 'Please provide a username and password.';
        }else{
          $authAdapter = $this->_getAuthAdapter($formData);
          $auth = Zend_Auth::getInstance();
          $result = $auth->authenticate($authAdapter);
          if($result->isValid()) {
            $data = $authAdapter->getResultRowObject(null,'password');
            $auth->getStorage()->write($data);
            $success = true;
            $redirectUrl = $this->_redirectUrl;
          }else{
            $message = 'Login failed';
          }
        }
      }

      if(!$success){
        $flashMessenger = $this->_helper->FlashMessenger;
        $flashMessenger->setNamespace('actionErrors');
        $flashMessenger->addMessage($message);
        $redirectUrl = '/auth/login';
      }
      $this->_redirect($redirectUrl);
    }

    protected function _getAuthAdapter($formData){
      $dbAdapter = Zend_Registry::get('db');
      $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
      $authAdapter->setTableName('utenti')
                  ->setIdentityColumn('username')
                  ->setCredentialColumn('password');     

      $config = Zend_Registry::get('config');
      $salt = $config->auth->salt;
      $password = sha1($salt.$formData['password']);   

      $authAdapter->setIdentity($formData['username']);
      $authAdapter->setCredential($password);         

      return $authAdapter;
    }

    protected function _getFormData(){
      $data = array();
      $filterChain = new Zend_Filter;
      $filterChain->addFilter(new Zend_Filter_StripTags);
      $filterChain->addFilter(new Zend_Filter_StringTrim);

      $data['username'] = $filterChain->filter($this->_request->getPost('username'));
      $data['password'] = $filterChain->filter($this->_request->getPost('password'));
      return $data;
    }

    public function logoutAction() {
      $auth = Zend_Auth::getInstance();
      $auth->clearIdentity();
      $this->_redirect('/');
    }
  }
</pre>
<p>Come per l&#8217;<b>IndexController</b> anche questo <b>AuthController</b> contiene il metodo init() utile all&#8217;inserimento nell&#8217;output delle parti comuni del layout (header, footer ecc.. ).</p>
<p>L&#8217;indexAction altro non contiene che una redirezione alla loginAction, in modo tale che entrando nella pagina di autorizzazione senza specificare una action, login venga eseguita. La LoginAction redireziona l&#8217;output nell&#8217;IndexController ( quindi nella homepage ) del sito nel caso in cui l&#8217;utente sia già autorizzato, ovvero nel caso in cui $auth->hasIdentity() ritorni true. Inoltre viene recuperato l&#8217;helper <b>FlashMessenger</b>, che contiene eventuali messaggi salvati da una precedente azione, salvati nella proprietà $this->view->actionErrors, in modo tale da poterli visualizzare nella vista.<br />
Alla loginAction è legata la view login.phtml, il seguente è il codice:</p>
<p><b>login.phtml</b></p>
<pre name="code" class="php">
&lt;h1&gt;Log in&lt;/h1&gt;
&lt;p&gt;Please log in here&lt;/p&gt;
&lt;?php echo isset($this-&gt;actionErrors[0]) &#038;&#038; !empty($this-&gt;actionErrors[0]) ? "&lt;p class='error'&gt;" . $this-&gt;escape($this-&gt;actionErrors[0]) . "&lt;/p&gt;" : ""; ?&gt;

&lt;form method="POST"
        action="&lt;?php echo $this-&gt;LinkTo('auth/identify'); ?&gt;"&gt;
    &lt;div&gt;
        &lt;label&gt;Username&lt;/label&gt;
        &lt;input type="text" name="username" value="" /&gt;
    &lt;/div&gt;
    &lt;div&gt;
        &lt;label&gt;Password&lt;/label&gt;
        &lt;input type="password" name="password" value="" /&gt;
    &lt;/div&gt;
    &lt;div&gt;
        &lt;input type="submit" name="login" value="Login" /&gt;
    &lt;/div&gt;
&lt;/form&gt;
</pre>
<p>L&#8217;unico particolare degno di nota di questo file è l&#8217;attributo action del form. Questo è generato da un view helper, <b>LinkTo</b> che si occupa di creare la corretta url per la identifyAction, recuperando il valore corretto di $baseUrl.</p>
<p><b>LinkTo.php</b></p>
<pre name="code" class="php">
< ?php

  class Zend_View_Helper_LinkTo
  {
    protected static $baseUrl = null; 

    public function linkTo($path){
      if(self::$baseUrl === null){
        $request = Zend_Controller_Front::getInstance()->getRequest();
        $root = '/' . trim($request->getBaseUrl(), '/');
        if ($root == '/'){
          $root = '';
        }
        self::$baseUrl = $root . '/';
      }
      return self::$baseUrl . ltrim($path, '/');
    }
  }
</pre>
<p>Procedendo con le action dell&#8217;AuthController troviamo l&#8217;<b>identifyAction</b>, che controlla l&#8217;esistenza di una richiesta POST, quindi filtra il contenuto dell&#8217;array POST passandolo al metodo <b>_getFormData</b></p>
<p>, che filtra il suo contenuto utilizzando l&#8217;oggetto <b>Zend_Filter</b> e aggiungendo come filtri gli oggetti <b>Zend_Filter_StripTags</b> e <b>Zend_Filter_StringTrim</b>, il cui compito è il medesimo delle funzioni built in del linguaggio <a href="http://it.php.net/manual/it/function.trim.php" target="_blank" title="trim php.net">trim() e </a><a href="http://it.php.net/manual/it/function.strip-tags.php" target="_blank" title="strip_tags php.net">strip_tags</a>.</p>
<p>I dati inviati vengono quindi passati al metodo <b>_getAuthAdapter</b> che si occupa di istanziare  la classe <b>Zend_Auth_Adapter_DbTable</b> a quale passeremo l&#8217;oggetto $db recuperato dal registro ed indicheremo la tabella e i campi in cui dovranno essere verificati l&#8217;username e la password inviate. Per rendere il tutto più sicuro la password, oltre ad essere salvata criptata sul database tramite l&#8217;algoritmo SHA1, è unita ad un salt, una stringa casuale salvata nel nostro file di configurazione, il che rende estremamente difficile, se non impossibile, recuperare il valore della password conoscendo il suo valore criptato e cercando di effettuare un reverse engineering.</p>
</p>
<p>L&#8217;oggetto <b>Zend_Auth_Adapter_DbTable</b> ritornato dal nostro metodo <b>_getAuthAdapter</b> sarà quindi passato a <b>Zend_Auth</b>, che ci confermerà o meno l&#8217;esistenza dell&#8217;utente tramite la chiamata del metodo <b>sValid()</b>. In caso di fallimento l&#8217;output sarà redirezionato alla medesima pagina di autenticazione accompagnata dal messaggio indicante la non riuscita dell&#8217;operazione. In caso di successo, i dati utente recuperati saranno salvati nella sessione, fatta eccezione che per la password.</p>
<h2>Messaggio di benvenuto</h2>
</p>
<p>In ogni sito che si rispetti, una volta autenticati il sistema ci da un messaggio di benvenuto, indicante il nostro nome. Ebbene, anche il nostro sistema godrà di questa caratteristica, utilizzando un nuovo view helper,  <b>LoggedInUser</b>.</p>
<p><b>LoggedInUser</b></p>
<pre name="code" class="php">
< ?php
  class Zend_View_Helper_LoggedInUser {
    protected $_view; 

    function setView($view) {
      $this->_view = $view;
    }

    function loggedInUser(){
      $auth = Zend_Auth::getInstance();
      if($auth->hasIdentity()){
        $logoutUrl = $this->_view->linkTo('auth/logout');
        $user = $auth->getIdentity();
        $username = $this->_view->escape(ucfirst($user->username));
        $string = 'Loggato come ' . $username . ' | <a href="' . $logoutUrl . '">Log out</a>';
      }else{
        $loginUrl = $this->_view->linkTo('auth/login');
        $string = '<a href="'. $loginUrl . '">Log in</a>';
      }
      return $string;
    }
  }
</pre>
<p>La stringa ritornata sarà visualizzata, per esempio, nell&#8217;header.</p>
<p><b>header.phtml</b></p>
<pre name="code" class="php">
<h1>Paesidelmondo Header</h1>
<form action="#">
 <fieldset>
  <legend>Registratione</legend>
  <label for="name">Nome Utente:</label>
<input id="name" name="name" type="text" autocomplete="off" />
 </fieldset>
</form>
<div id="message"></div>

< ?php echo $this->LoggedInUser();?>
</pre>
<p>Con questo si conclude il tutorial all&#8217;<b>autenticazione con Zend Framework</b>. I commenti, aggiunte, correzioni o altro sono sempre graditi.</p>
<div class="ratings">Note: There is a rating embedded within this post, please visit this post to rate it.</div>


<p>Related posts:<ol><li><a href='http://razorblade.netsons.org/2008/11/30/zend-framework-introduzione-al-componente-zend_form/' rel='bookmark' title='Permanent Link: Zend Framework: introduzione al componente Zend_Form'>Zend Framework: introduzione al componente Zend_Form</a> <small>Creare form web con Zend Form Con Zend Framework possiamo...</small></li><li><a href='http://razorblade.netsons.org/2009/02/02/zend-framework-gestione-dei-moduli-ed-esempio-modulo-di-amministrazione/' rel='bookmark' title='Permanent Link: Zend Framework: gestione dei moduli ed esempio modulo di amministrazione'>Zend Framework: gestione dei moduli ed esempio modulo di amministrazione</a> <small>Come usare Zend_Layout per la gestione dei moduli In quest'articolo...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://razorblade.netsons.org/2008/09/13/costruire-un%e2%80%99applicazione-reale-con-zend-framework-parte-8/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Sessioni con PHP: Funzionalità di Base</title>
		<link>http://razorblade.netsons.org/2008/06/24/sessioni-con-php-funzionalita-di-base/</link>
		<comments>http://razorblade.netsons.org/2008/06/24/sessioni-con-php-funzionalita-di-base/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 00:12:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[autenticazione]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[sessioni]]></category>
		<category><![CDATA[username]]></category>

		<guid isPermaLink="false">http://razorblade.netsons.org/?p=3</guid>
		<description><![CDATA[Le sessioni sono un argomento di per se non difficile ma che <strong>spesso genera molta confusione</strong>. Questo post cercherà di spiegare l'utilizzo delle funzioni fondamentali per la gestione delle sessioni. E' presumibile che in un prossimo futuro siano trattate tutte le funzionalità più avanzate, quindi date uno sguardo di tanto in tanto.

<strong>A che servono le sessioni?</strong> <a href="http://razorblade.netsons.org/2008/06/24/sessioni-con-php-funzionalita-di-base/">[...] Continua</a>


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Le sessioni sono un argomento di per se non difficile ma che <strong>spesso genera molta confusione</strong>. Questo post cercherà di spiegare l&#8217;utilizzo delle funzioni fondamentali per la gestione delle sessioni. E&#8217; presumibile che in un prossimo futuro siano trattate tutte le funzionalità più avanzate, quindi date uno sguardo di tanto in tanto.</p>
<p><strong>A che servono le sessioni? Che cosa sono?</strong><br />
Le sessioni servono al fine di poter implementare sezioni protette da username e password sul proprio sito internet / gestionale web o per salvare dei dati in maniera globale. Le sessioni funzionano tramite un cookie quindi per funzionare correttamente vi è la necessità che il client abbia i permessi per accettare i cookie. In caso fossero disattivati, php da la possibilità di utilizzare di propagare l&#8217;id di sessione utilizzando le url sel sistema, solo se &#8217;session.use_trans_sid&#8217; è settata nel php.ini.</p>
<p>Ad oggi le funzioni che gestiscono la sessione sono in tutto 20, per eventuali approfondimenti potete guardare <a href="http://it2.php.net/manual/it/ref.session.php" target="_blank">qui</a>. In questo articolo ci limiteremo a trattare le seguenti:</p>
<ul class='listato'>
<li><a href="http://it2.php.net/manual/it/function.session-destroy.php" target="_blank">session_ destroy</a></li>
<li><a href="http://it2.php.net/manual/it/function.session-id.php" target="_blank">session_ id</a></li>
<li><a href="http://it2.php.net/manual/it/function.session-is-registered.php" target="_blank">session_ is_ registered</a></li>
<li><a href="http://it2.php.net/manual/it/function.session-register.php" target="_blank">session_ register</a></li>
<li><a href="http://it2.php.net/manual/it/function.session-start.php" target="_blank">session_ start</a></li>
<li><a href="http://it2.php.net/manual/it/function.session-unregister.php" target="_blank">session_ unregister</a></li>
<li><a href="http://it2.php.net/manual/it/function.session-unset.php" target="_blank">session_ unset</a></li>
</ul>
<p>Prima di cominciare vorrei fare una piccola premessa.<br />
Spesso utilizzerò la funzione <a href="http://it.php.net/manual/it/function.var-dump.php" target="_blank">var_dump</a>, funzione molto utile a livello di debug in quanto mostra tipo, lunghezza e soprattutto valore delle espressioni passate ad argomento.<br />
Inoltre, per testare i vari codici che seguiranno, vi consiglio di creare 3 files differenti, uno chiamato session_starter.php, uno session_checker.php ed infine session_destroyer.php che serviranno rispettivamente per inizializzare la sessione ed inserire dati al suo interno, per visualizzare il contenuto della sessione ed infine per distruggere la sessione.</p>
<h2>1) Inizializzare la sessione</h2>
<p>A meno che sul php.ini non sia specificato <strong>session.auto_start</strong> uguale a 1 ( di default è 0 ) per poter utilizzare la sessione all&#8217;interno dei nostri script sarà necessario inizializzarla. Quindi, la prima riga del nostro script sarà</p>
<pre name="code" class="php">
// Inizializza la sessione
session_start();
</pre>
<h2>2) Visualizzare l&#8217;id di sessione corrente</h2>
<p>Da questo momento in poi potremo utilizzare anche le altre funzionalità che php mette a disposizione. Proviamo dunque ad utilizzare la funzione session_id() all&#8217;interno del nostro script</p>
<pre name="code" class="php">
// Visualizziamo l'attuale id di sessione
echo session_id();</pre>
<p>Che visualizzerà qualcosa del genere: 28d7c083fccb973b56972cc448b72310</p>
<p><strong>Ma che cos&#8217;è l&#8217;ID di sessione?</strong></p>
<p>L&#8217;id di sessione contraddistingue univocamente due files di testo, un cookie salvato sul vostro PC e un file contenente i dati di sessione salvato sul server remoto.<br />
<strong>Per visualizzare il cookie in locale</strong>, utilizzando Firefox, selezionare Strumenti -&gt; Opzioni -&gt; Privacy -&gt; Mostra Cookie: visualizzerete diverse cartelle ognuna delle quali corrisponde ad un sito visitato che vi ha inviato un cookie. Aprite la cartella relativa al dominio in cui state testando i vostri script ( se siete in locale sarà localhost ). Questo è ciò che vedrete</p>
<p><a class="images" href="http://razorblade.netsons.org/wp-content/cookie.jpg"><img title="cookie" src="http://razorblade.netsons.org/wp-content/cookie.jpg" alt="" /></a></p>
<p><strong>Dov&#8217;è salvata la sessione sul server?</strong> Di default la sessione viene salvata all&#8217;interno di una directory chiamata &#8216;tmp&#8217;. Per verificare l&#8217;esatto percorso visualizzare la stringa ritornata da questa funzione: ini_get(&#8217;session.save_path&#8217;);<br />
Questo è un esempio di ciò che troverete:<br />
<a class="images" href="http://razorblade.netsons.org/wp-content/session.jpg"><img title="session" src="http://razorblade.netsons.org/wp-content/session.jpg" alt="" width="300" /></a></p>
<p>Noterete un file con prefisso sess_ seguito dall&#8217;identificativo della sessione ( è probabile che all&#8217;interno di tmp esistano numerosi file sess_* ), nel mio caso sess_28d7c083fccb973b56972cc448b72310. Apritelo con un qualsiasi editor di testo, noterete che è vuoto in quanto non abbiamo ancora inserito nulla all&#8217;interno della sessione.</p>
<h2>3) Inserimento dei dati all&#8217;interno della sessione</h2>
<p>Inserire i dati all&#8217;interno dell&#8217;array di sessione è molto semplice, un esempio vale più di mille parole</p>
<pre name="code" class="php">$_SESSION['test'] = "blah";</pre>
<p>Proviamo a vedere cosa è successo al file di testo sul server contenente i dati di sessione, vedremo che al suo interno è stata inserita la seguente stringa: test|s:4:&#8221;blah&#8221;;<br />
Questo non è nient&#8217;altro che la nostra variabile serializzata, analizzarla è molto semplice:<br />
<strong>test</strong> è il nome della variabile che abbiamo inserito, <strong>s</strong> è il tipo di variabile ( stringa ), <strong>blah</strong> è il valore che gli abbiamo attribuito.</p>
<p>Proviamo ad aggiungere un&#8217;altra variabile, un array ad esempio</p>
<pre name="code" class="php">$_SESSION['mioArray'] = array(1 =&gt; 'uno', 'due' =&gt; 2);</pre>
<p>Il nostro file di sessione sarà modificato e questa sarà la stringa al suo interno: test|s:4:&#8221;blah&#8221;;mioArray|a:2:{i:1;s:3:&#8221;uno&#8221;;s:3:&#8221;due&#8221;;i:2;}, il risultato si spiega da solo:<br />
<strong>mioArray</strong> è il nome della variabile, <strong>a</strong> il tipo ( array ), <strong>2</strong> la lunghezza e all&#8217;interno delle graffe i valori <strong>i:1;s:3:&#8221;uno&#8221;;</strong> e <strong>s:3:&#8221;due&#8221;;i:2;</strong> che rappresentano le coppie chiave valore ( <strong>i</strong> sta per integer ).<br />
Da notare che la situazione sarebbe stata la stessa usando il seguente codice</p>
<pre name="code" class="php">$mioArray = array(1 =&gt; 'uno', 'due' =&gt; 2)
$_SESSION['mioArray'] = $mioArray;</pre>
<p>Allo stesso modo è possibile salvare degli <strong>oggetti</strong> all&#8217;interno della sessione.<br />
Creiamo quindi una semplicissima classe la cui istanza sarà salvata nella sessione</p>
<pre name="code" class="php">
class miaClasse{
public $variabilePubblica;
private $variabilePrivata;
public function __construct(){
$this-&gt;variabilePubblica = 1;
$this-&gt;variabilePrivata = 2;
}
}

$obj = new miaClasse();
$_SESSION['mioOggetto'] = $obj;
</pre>
<p>Provate da voi a vedere le modifiche all&#8217;interno del file di sessione.</p>
<h2>4) Comportamenti Anomali</h2>
<p>Ad oggi ho riscontrato i seguenti comportamenti anomali della sessione:</p>
<p><strong>Primo</strong><br />
Provate ad eseguire il seguente codice</p>
<pre name="code" class="php">
$_SESSION['26'] = 'Prova';
echo $_SESSION['26'];
</pre>
<p>Otterrete esattamente ciò che vi aspettate, ovvero &#8216;<strong>Prova</strong>&#8216;.<br />
Eseguite quindi solo la seconda linea di codice, non notate qualcosa di strano?<br />
<strong>Non viene stampato nulla su schermo</strong>, sembra che la nostra variabile &#8216;26&#8242; sia scomparsa nel nulla, e difatti è così.<br />
A meno che non esista un qualche parametro di configurazione di cui non conosca l&#8217;esistenza, sembra che creando una variabile contenente esclusivamente dei numeri, che sia stringa o meno ( quindi tra apici o meno ), php non lo salvi nella sessione.</p>
<p>Per chiarire questa situazione ho effettuato varie prove, tra cui l&#8217;utilizzo della funzione session_register(). Prima di esporvi i risultati di queste prove e il caso di scrivere due righe sulle funzioni session_register(), session_is_registered() e session_unregister(). Queste 3 funzioni erano utilizzate soprattutto nelle versioni precedenti di php, quando la direttiva register globals era spesso settata su &#8216;on&#8217;. Oggi se ne sconsiglia l&#8217;utilizzo.</p>
<p>La seguente è stata la prova da me effettuata:</p>
<pre name="code" class="php">
session_register('26');
$_SESSION['26'] = 'Prova';
</pre>
<p>Eseguendo var_dump($_SESSION) noteremo che l&#8217;indice numerico è stato correttamente salvato nella sessione ma con valore NULL. Non abbiamo risolto nulla ma sappiamo qualcosa in più sul comportamento della sessione. Quindi evitiamo di salvare chiavi solo numeriche all&#8217;interno della sessione.</p>
<p><strong>Secondo</strong><br />
Inserite tutte le variabili che volete nella sessione, quindi eseguite il seguente codice:</p>
<pre name="code" class="php">
$_SESSION["foo|bar"] = "foo";
</pre>
<p>Controllate il contenuto della sessione, noterete che è stato cancellato completamente. Questo comportamento è causato dal carattere &#8216;|&#8217;, quindi evitate di utilizzarlo.<br />
Questo è comunque un bug conosciuto di php, potete trovare ulteriori informazioni <a href="http://bugs.php.net/bug.php?id=33786" target="_blank">qui</a></p>
<h2>5) Distruggere la sessione</h2>
<p>Per distrugger la sessione si utilizza la funzione session_destroy(). Questa funzione una volta chiamata causa l&#8217;eliminazione di tutto il contenuto presente all&#8217;interno del file di sessione sul server.<br />
Per maggiore sicurezza sull&#8217;eliminazione di questi dati alla chiamata di questa funzione affianchiamo $_SESSION = array();.<br />
I dati possono anche essere rimossi dalla sessione utilizzando session_unset(), funzione che può essere tranquillamente omessa utilizzando il metodo sopra citato.<br />
Infine, per eliminare definitivamente il file fisico dal server effettuiamo la seguente chiamata setcookie(session_name(),&#8221;,time()-3600) che setta la scadenza del cookie ad &#8216;un ora fa&#8217;.<br />
Notate che l&#8217;eliminazione della sessione non cambia in automatico l&#8217;id di sessione, infatti, aggiungendo dati all&#8217;interno della sessione dopo averla eliminata sarà ricreato sul server un file con lo stesso nome del precedente ma con i nuovi dati inseriti.</p>
<p>Per ora è tutto, spero di aver fatto più chiarezza sull&#8217;argomento sessioni.</p>
<div class="ratings">Note: There is a rating embedded within this post, please visit this post to rate it.</div>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://razorblade.netsons.org/2008/06/24/sessioni-con-php-funzionalita-di-base/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
