Salve a tutti!
spero di riuscire a far capire di cosa ho bisogno: sto imparando ad utilizzare php in tempi un po' troppo brevi per i miei gusti (ho una scadenza per un progetto di laurea universitario) ed ora sto iniziando ad integrare le sessioni. Ho il mio progetto che sembra essere funzionale (speriamo) e nel quale è prevista una login iniziale. Dopo questa l'utente ha loggato può essere generico o amministratore grazie ad un campo temp (0 o 1) presente nel database nella tabella "utenti". Nelle varie pagine si verifica se l'utente è loggato e quindi se può accedere con qualcosa del tipo:
Codice PHP:
<?php
include_once("../include/config.php")
include_once("../include/auth.lib.php");
list($status, $user) = auth_get_status();
if($status == AUTH_LOGGED){
$msg = 'Contenuto della pagina';
}else $msg = 'Non hai i diritti per visualizzare la pagina';
?>
e fin qui credo sia tutto ok...
Ora credo che per portarmi dietro il tipo di permesso dell'utente devo utilizzare le sessioni. Allora mi sono letto la vostra bella guida (approfitto per i complimenti al sito!) ed ho creato il file db_session_class.php (e la rispettiva tabella my_session nel database) strutturato come segue:
Codice PHP:
<?php
require('config.inc.php');
class my_session {
var $my_session_id; // l'id di sessione
var $session_time; // la durata della sessione
var $session_gc_time; // il tempo per la garbage collection
//il costruttore della classe, inizializza le variabili
function my_session($session_time, $session_gc_time) {
$this->my_session_id = (!isset($_COOKIE['my_session_id'])) ? md5(uniqid(microtime())) : $_COOKIE['my_session_id'];
$this->session_time = $session_time;
$this->session_gc_time = $session_gc_time;
}
// avvia o aggiorna la sessione
function my_session_start() {
$cookie_expire = ($this->session_time > 0) ? (time() + $this->session_time) : 0;
if(!isset($_COOKIE['my_session_id'])) {
setcookie('my_session_id', $this->my_session_id, $cookie_expire);
mysql_query("INSERT INTO my_session VALUES('" . $this->my_session_id . "', '', " . time() . ")");
} else {
if($this->session_time > 0)
setcookie('my_session_id', $this->my_session_id, $cookie_expire);
}
}
/* registra le variabili di sessione
specificata nel database */
function my_session_register($name, $value) {
$_MY_SESSION = array();
$session_query = mysql_query("SELECT session_vars FROM my_session WHERE sessid = '{$this->my_session_id}'");
if(mysql_num_rows($session_query) > 0) {
$result = mysql_fetch_array($session_query);
$_MY_SESSION = unserialize($result['session_vars']);
$_MY_SESSION[$name] = $value;
mysql_query("UPDATE my_session SET session_vars = '" . serialize($_MY_SESSION) . "' WHERE sessid = '{$this->my_session_id}'");
} else {
$_MY_SESSION[$name] = $value;
mysql_query("UPDATE my_session SET session_vars = '" . serialize($_MY_SESSION) . "' WHERE sessid = '{$this->my_session_id}'");
}
}
/* legge e restituisce le variabili di sessione
(o la singola variabile specificata */
function my_session_read($key = '') {
$session_query = mysql_query("SELECT session_vars FROM my_session WHERE sessid = '{$this->my_session_id}'");
if(mysql_num_rows($session_query) > 0) {
$result = mysql_fetch_array($session_query);
$session_vars = unserialize($result['session_vars']);
return (isset($key) && $key) ? $session_vars[$key] : $session_vars;
}
}
/* distrugge la sessione, rimuovendo i relativi
dati (non cancella il cookie) */
function my_session_destroy() {
mysql_query("UPDATE my_session SET session_vars = '' WHERE sessid = '{$this->my_session_id}'");
}
// procedura di garbage collection
function my_session_gc() {
mysql_query("DELETE FROM my_session WHERE session_date < " . (time() - $this->session_gc_time));
}
} // end class
?>
ora cosa dovrei fare per mantenere questo riferimento ai permessi nelle pagine?
my_session_start() in ogni pagina?
my_session_register() quando?
my_session_destroy() quando?
come recupero il permesso nella pagina e come lo controllo?
ed infine: se utilizzo questa procedura è comunque necessario il controllo iniziale per vedere se l'utente è loggato?
scusate lo sproloquio ma cerco di far capire qual'è il mio intoppo.
Ciao e grazie anticipatamente a chi potrà darmi una mano