[RoLUG] variabili di sessione PHP

Dario Rigolin drigolin@iol.it
Gio 11 Mar 2004 19:40:09 CET


On Thursday 11 March 2004 17:08, Chiarello Cristian wrote:
> Per caso avreste un esempio?
> Ho letto il manuale e per la versione che ho io (4.2.2) dice di usare la
> variabile $_SESSION: da quel che ho capito io, è visibile sempre per
> tutta la sessione.

E' visibile (nel senso che è definita) sempre. E' nella tipologia di variabili 
dette "superglobal" perchè sono presenti in tutti gli scope: metodi, funzioni 
e classi.

> Con sessione io intendo, con definizione bruta :), la serie di
> opreazioni di un utente dal browser dal momento in cui si collega ad un
> sito al momento in cui esce (meglio ancora se chiude il browser :)) ).

Queste definizione è SBAGLIATA!!!  Sessione è semplicemente uno storage di 
dati persistenti legati alla connessione che un'istanza di un browser 
effettura verso la tua applicazione PHP. Session è server side!

> Quindi, io ho fatto cosi':
>
> global $var_glob;
> $var_glob = new miooggetto();
> $_SESSION['nomevar'] = $varglob;
>
> dove miooggetto e' una classe da me definita.

Fino a qua funziona ma devi fare session_start() prima oppure mettere 
"session_autostart=on" su PHP.INI. Se non lo fai non andrà mai perchè non hai 
mai detto a PHP di partire. Non capisco perchè fai global se non sei dentro 
una funzione e vuoi vedere una variabile all'esterno non serve. 
L'assegnamento in PHP è una copia quindi la tua ultima riga copia l'oggetto 
dentro l'hashmap $_SESSION.

> La vede solo nello script come se fosse locale, poi va persa :(
> Qlc suggerimento? (anche senza var di sessione, basta che la variabile
> la possa usare anche quando passo da una pagina ad un'altra)
> Ciao!

Credo di averti messo nella strada giusta. Se parti dagli esempi del PHP base 
dovresti avere qualcosa che funziona.

Piccola nota sul fatto che stai mettendo una "CLASSE" in sessione. La sessione 
serializza tutti i dati che le dai su un file per metterli al sicuro. C'è da 
stare attenti quando metti in sessioni classi e non dati base: devi 
ricordarti di includere la definizione della classe prima di fare 
session_start(). session_start() va invocato in ogni pagina che vuole 
accedere a $_SESSION.

Ciao!

-- 
Dario Rigolin
Mobile: +39 347 7232652


Maggiori informazioni sulla lista RoLUG