Ciao a tutti!
Nei seguenti 4 punti spiego come io gestirei le sessioni in PHP.
Subito dopo troverete delle domande a cui non riesco a dare risposta!
Sapreste Aiutarmi? Grazie!
1) Al DB aggiungo la tabella "Sessioni" con la seguente struttura:
id (char 32)
idUtente (int chiave esterna Utenti)
dataCreazione (int secondi)
2) Creo una variabile globale $idUtente che assumerà il valore di null se l'utente è un visotatore non loggato, altrimenti nel caso una persona si logghi, assumerà il suo id.
3) Creo il seguente script (lo scrivo in PSEUDO-codice):
Codice PHP:
<?php
$idUtente = null;
function open($save_path, $session_name) {
INSERISCO NELLA TABELLA SESSIONI, SE NON GIA' PRESENTE, L'UTENTE
ALTRIMENTI (SE GIA' PRESENTE) AGGIORNO NELLA TABELLA SESSIONI IL VALORE DATA_CREAZIONE
}
function close() {
NON FARE NULLA !?!
return true;
}
function read($idSession) {
AGGIORNO NELLA TABELLA SESSIONI IL VALORE DATA_CREAZIONE
}
function write($idSession, $dataSession) {
AGGIORNO NELLA TABELLA SESSIONI IL VALORE DATA_CREAZIONE
}
function destroy($idSession) {
global $idUser = null; --> IMPORTANTE!!!!
ELIMINO DALLA TABELLA SESSIONI LA SESSIONE CHE HA ID=$idSession
}
function gc($maxlifetime) {
NON HO CAPITO A COSA SERVE ? ? ?
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
?>
4) Quando l'utente effetturà una richiesta al server (ad esempio con una chiamata ajax) controllerò la variabile globale $idUser:
se $idUser == null stamperò un messaggio "sessione scaduta"
altrimenti esegue la richiesta
I MIEI DUBBI:
-- A cosa dovrebbe servirmi la funzione "gc"?
-- E' corretto utilizzare la variabile globale $idUser oppure esisite un metodo migliore?
-- Invece di utilizzare la variabile $idUser per controllare se la sessione è scaduta o meno, non potrei semplicemente fare un controllo di questo tipo:
if(!isset($_SESSION["idUser"])) echo "sessione scaduta"; (quindi dal mio script elimino completamente questa variabile globale)?
-- Il campo dataCreazione della tabella Sessioni, per come ho scritto i 4 punti, non mi serve praticamente a nulla, forse sbaglio qualcosa? A cosa dovrebbe servirmi questo campo?
-- Supponendo che la colonna creazioneData mi serva, per aggiornare il suo valore (nelle funzioni "open","read","write") mi basta utilizzare la funzione time(), corretto?