Post by rob4youquando in una pagina php imposto delle variabili di sessione, dove
vengono memorizzate? E cosa viene inviato al client? Solo il
PHPSESSID o tutte le variabili?
Le variabili di sessione vengono serializzate e memorizzate in un file
di testo dentro a una cartella posta *sul server*. Il percorso di
tale cartella è determinato dalla direttiva session.save_path.
Se, per esempio, creassi una variabile di sessione di nome var_ses,
contenente la stringa `prova`, sul server verrebbe salvato un file di
testo contente una stringa tipo la seguente:
var_sess|s:4:"test";
il cui significato è piuttosto evidente: la variabile var_sess è una
stringa (s) di 4 caratteri pari a "test".
Se oltre a essa memorizzassi anche una seconda variabile, di nome
var_sess2, contenente il numero intero 100, allora verrebbe salvata la
stringa:
var_sess|s:4:"test";var_sess2|i:100;
Questo file avrà un nome simile a
`sess_3d048a150181e33a2ded3a55bfb91da9`, dove la sequenza di numeri e
lettere rappresenta il session_id. Per poter recuperare le variabili
salvate in sessione è quindi necessario propagare da una pagina
all'altra il session_id e per fare ciò esistono diverse strade.
Se la direttiva session.use_cookies fosse impostata su 1 e il client
fosse abilitato a memorizzare i cookie di sessione, allora sul client
verrebbe creato un cookie contenente proprio il session_id. In questo
caso, ogni pagina che facesse uso delle sessioni potrebbe recuperare
il session_id direttamente dal cookie e, una volta recuperatolo, il
PHP metterebbe a disposizione le variabili di sessione, memorizzate
nel corrispondente file, attraverso il superglobal array $_SESSION.
Se il client non permettesse la memorizzazione dei cookie o la
direttiva session.use_cookies non fosse impostata su 1, allora la
propagazione del session_id sarebbe demandata alla direttiva
session.use_trans_sid. Se tale direttiva fosse impostata su 1, allora
il PHP provvederebbe a propagare il session_id in modo automatico,
appendendolo come parametro (con il nome di default di PHPSESSID,
determinato dalla direttiva session.name) in tutti i link relativi,
aggiungerebbe in tutti i form che inviassero dati a pagine del sito
un campo hidden con il session_id e così via in modo da propagarlo da
una pagina all'altra. La direttiva url_rewriter.tags stabilisce quali
TAG, in questo specifico caso, il PHP deve coinvolgere per garantire
la propagazione del session_id.
Se la direttiva session.use_trans_sid fosse impostata su 0 e non fosse
possibile utilizzare i cookie, allora sarebbe necessario aggiungere
manualmente il session_id a tutti i link, form, ecc. Per fare ciò
sarebbe possibile utilizzare la costante SID, la quale, dopo aver
avviato una sessione con session_start(), contiene una stringa simile
a `PHPSESSID=3d048a150181e33a2ded3a55bfb91da9`. Alternativamente,
sarebbe anche possibile prevedere un proprio sistema di
memorizzazione e propagazione del session_id (magari salvandolo in
una tabella di un database) anche attraverso l'uso di
session_set_save_handler().
Questo in linea di massima e salvo errori. Per ulteriori informazioni:
http://www.php.net/manual/it/ref.session.php
Ciao.
--
Federico