Mantenere dati di SESSION dopo chiusura finestra

July 27th 2011 by Paolo Bindi in: Php | Tags: Php

Anche se concettualmente sbagliato (non ha senso infatti mantenere dati di SESSION quando l'applicazione ha terminato) potrebbe capitare che per questioni di praticità nello scrivere il codice, non potete salvare tutta la struttura di una variabile di SESSION in una tabella, ma avrete necessità di assegnarla così com'è di nuovo all'apertura dell'applicazione.
Procediamo nel seguente modo,

1) Salviamo i dati in un campo TEXT di una tabella MySql o su un file di testo. Se la struttura presenta dimensioni notevoli, ipotizzare di usare MEDIUMTEXT o LONGTEXT, evitando così che i dati vengano troncati e quindi poi inutilizzabili.

2) Salvataggio dati in tabella, usando questa istruzione

$oProjectTable= new ClassProjectTable;
$oProjectTable->setSessionVariable(serialize($_SESSION['PROJECT']['MODULE']['AREASINFO']));

dove...
- setSessionVariable è il metodo della classe ClassProjectTable che assegna il valore e successivamente, con il metodo insert lo inserisce nella base dati, nel campo session_variable
- $_SESSION['PROJECT']['MODULE']['AREASINFO'] è la struttura della variabile di sessione, che conterrà un array
- serialize è la funzione php che usiamo per serializzare i dati.
Dopo l'inserimento, nel campo avremo dei dati di questo tipo

a:1:{i:1;a:6:{s:8:"areaname";s:4:"dfgh";s:8:"descarea";s:4:"dfgh";s:8:"typearea";s:1:"1";s:7:"invoice";s:1:"1";s:8:"billable";s:1:"1";s:5:"bonus";s:1:"0";}}


3) Quindi rileggo i dati nel seguente modo

$_SESSION['PROJECT']['MODULE'] ['AREASINFO']=unserialize($oProjectTable->getSessionVariable());

dove...
- getSessionVariable è il metodo della classe ClassProjectTable che preleva il dato dalla tabella
- $_SESSION['PROJECT']['MODULE']['AREASINFO'] è la stessa struttura della variabile di sessione, che ritornerà ad essere un array.
- unserialize è la funzione php che usiamo per deserializzare i dati.

Se quindi stampiamo i dati, avremo di nuovo la struttura e i dati originari dell'array

Array
(
    [1] => Array
        (
            [areaname] => dfgh
            [descarea] => dfgh
            [typearea] => 1
            [invoice] => 1
            [billable] => 1
            [bonus] => 0
        )

)

Nel caso che riscontrate qualche errore o se volete contattarmi per qualche consiglio o suggerimento, utilizzate la form della sezione contatti