Salve a tutti
Mentre lavoravo ad un mio progetto (in php ovviamente) ho dovuto documentarmi un bel po' sulle sessioni (ringrazio tutti su questo forum per avermi aiutato ) e mi sono accorto alla fine che sono uno strumento davvero potente! Ho deciso quindi di scrivere questa "pillola" sul loro funzionamento e il loro utilizzo. Spero vi sia d'aiuto
1. Cosa sono le sessioni
Un Grande problema degli sviluppatori su internet è sempre stato quello di tener traccia di un utente. Il problema principale in effetti è che l'utente nel momento in cui richiede una pagina ad un server web, apre una connessione, riceve la pagina e le eventuali immagini o file inclusi in essa, dopodiché la connessione viene chiusa! Questo meccanismo si ripete ad ogni richiesta di pagina che voi fate anche in questo momento, su questo stesso forum!
Di soluzioni con un po’ di ingegno ce ne sono, all’inizio la soluzione più ovvia era quella di riconoscere l’utente tramite l’indirizzo IP, ma non è una soluzione sicura… infatti alcuni provider internet forniscono l’accesso alla rete tramite un server proxy, un server proxy è un intermediario fra il client e il server, fisicamente la richiesta di una pagina viene fatta dal proxy e non dal client, una volta completata il proxy poi farà girare il tutto e lo manderà al client. Questo è un problema, in questo modo il server può concludere che più richieste di pagine fatte da uno stesso indirizzo IP appartengono allo stesso utente, ma non è così.
Un’altra soluzione più sicura era quella di immettere delle variabili nascoste nelle pagine, solitamente infatti la navigazione in un sito avviene seguendo un URL o un(a) form. Si aggiungeva un ID univoco a entrambi i metodi in questo modo:
<a href=”pagina1.php?sID=adffkkADFFX223454DDAdadffd”> clicka e godi</a>(saibal ®)
oppure aggiungendo questo tag in un(a) form:
<input type=”hydden” name=”sID” value=” adffkkADFFX223454DDAdadffd”>
In ogni pagina si controlla l’esistenza della variabile $sID, se impostata si riconosceva l’utente.
C’è anche una funzione utile per generare un ID univoco ed è
uniqid(string $prefisso)
essa genera un ID univoco, se viene passato un prefisso, l’id univoco sarà preceduto da questo prefisso.
Cosa c’è di sbagliato?? Niente, funziona perfettamente, ma voi siete sicuri che in ogni pagina, ogni url, ogni form sia dotato di questa variabile speciale?? Siete sicuri che non ve ne sia sfuggito qualcuno??
Una soluzione elegante è invece l’utilizzo dei cookie, memorizzare il sid di sessione in un cookie, lavora in modo silenzioso e lo sviluppatore conosce in ogni momento il contenuto di quel cookie (se esiste). Purtroppo però c’è ancora gente che si ostina a non aggiornare i browser, infatti i cookie non sono sempre esistiti. C’è anche gente che ha la testa piena di quelle boiate sulla privacy che i giornali dicono dei cookie, ma questo è un altro discorso. L’unica funzione necessaria per servirsi dei cookie è
Setcookie()
L’argomento ‘cookie’ è stato già trattato molte volte, se vi servono maggiori informazioni fate una ricerca.
Nell’ultima versione di php4 però si è voluto ovviare (anche un po’ in ritardo rispetto agli altri) a questo problema introducendo le sessioni.
Tutto un arsenale di funzioni legate alle sessioni è stato introdotto, elencarle tutte non sarebbe molto pratico, inoltre, se avete bisogno di questo, c’è sempre il manuale ondine: www.php.net. Il loro funzionamento è semplice, controllano se il client ha abilitato i cookie, se si utilizza i cookie nel modo sopra descritto, altrimenti utilizza il metodo della variabile nascosta, la variabile quindi sarà aggiunta in ogni pagina quindi. E’ possibile memorizzare delle variabili di sessione che si vanno a posizionare in una posizione ben precisa sul server.
2. Come creare una sessione
Per creare una sessione basta semplicemente chiamare la funzione
Session_start()
Non prende argomenti, spiegare il funzionamento di questa funzione (molto complessa) sarebbe troppo lungo, l’unica nota è che se la sessione è stata aperta precedentemente, una nuova chiamata a questa funzione farà riaprire la vecchia sessione.
3. Le variabili di sessione
E’ possibile memorizzare da una parte sul server alcune variabili personali dell’utente di cui si vuol tenere traccia, l’uso di troppi cookie è poco elegante senza contare i sopraccitati problemi legati ai cookie. Questo procedimento avviene utilizzando la funzione session_register() facendone il seguente utilizzo:
$var = 1;
session_register(‘var’);
In questo modo la variabile $var verrà memorizzata fra le variabili di sessione. Attenzione: il parametro da passare alla funzione deve essere obbligatoriamente una stringa, bisogna inserire il nome della variabile a cui fa riferimento senza il simbolo $ davanti.
Il tipo della variabile passata alla funzione session_register() può essere anche un array o un oggetto. Non ha importanza.
E’ possibile accedere alle variabili di sessione tramite la variabile speciale $_SESSION[] o direttamente tramite il nome della variabile, nel caso precedente con $var.
Esiste anche un modo per verificare se una variabile di sessione è stata impostata, si utilizza la funzione:
session_is_registered(‘var’)
Restituisce vero se è settata, falso se non lo è.
E’ possibile cancellare una singola variabile di sessione utilizzando la funzione
Session_unregister(‘var’)
O tutte in una volta utilizzando la funzione:
session_unset()
3. Chiusura di una sessione
La sessione, per impostazione predefinita, termina alla chiusura del browser, per alcuni può essere un inconveniente, tuttavia è possibile cambiare a piacimento la scadenza del cookie con la funzione:
session_set_cookie_params($durata, $percorso, $dominio, $sicurezza)
il funzionamento dei parametri è identico a quelli che si utilizzano per i cookie, tranne il fatto che qui viene espressa la durata del cookie e non la scadenza!! Fate attenzione!! In un cookie quando si impostava la scadenza era solito mettere time() + 86400 se il cookie doveva durare un giorno, qui va SOLO 86400.
4. Distruzione di una sessione
La sessione tuttavia rimane memorizzata nella memoria del server se la sessione è ancora aperta (se come sopra settate un cookie destinato a durare svariati giorni). E’ possibile cancellare l’intera sessione con tutte le variabili correlate. Quindi:
session_destroy()
non prende parametri. La sessione ovviamente deve essere aperta per poter essere cancellata.
5. Funzioni aggiuntive
Esistono delle funzioni aggiuntive che possono tornare utili:
session_id($new_ID)
restituisce il sid di sessione, se viene passato l’univo parametro, il sid viene sostituito con quello passato.
Session_name($nome)
Restituisce il nome della sessione, per defalut ‘PHPSESSID’, se viene passato un parametro tuttavia è possibile rinominarlo. Esso sarà il nome della variabile speciale o del cookie.
Session_encode()
Questa funzione è un po’ particolare ma molto utile, serializza l’intera sessione in una stringa in modo da poter essere salvata su un database o file di testo ed essere recuperata successivamente con la funzione
Session_decode($stringa)
Credo basti, per ogni eventuale domanda chiedete qui sono a vostra disposizione.
Byez