Per le sessioni alternative ho questi semplici 4 files che sono poi gli stessi suggeriti nella guida.
Il file db.inc.php con i parametri di configurazione:
codice:
<?php
$db_host = "sql.xxx.x";
$db_user = "xxxx";
$db_password = "yyyy";
$db_name = "xxxx";
$session_time = 0; // durata del cookie
$session_gc_time = 1800; // tempo per l'esecuzione della garbage collection
?>
Il dile db_session_class.php:
codice:
<?php
require('db.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 la 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
?>
Il file start_session.php:
codice:
<?php
// inclusione del file che contiene la classe
require('db_session_class.php');
// connessione a MySql
mysql_connect($db_host, $db_user, $db_password);
// selezione del Database
mysql_select_db($db_name);
// Istanziamo l'oggetto
$my_session = new my_session($session_time, $session_gc_time);
// Avviamo la sessione inviando il cookie al client
$my_session->my_session_start();
// Richiamiamo la procedura di garbage collection
$my_session->my_session_gc();
// Registriamo tre variabili di prova
$my_session->my_session_register('nick', 'nick');
//$my_session->my_session_register('nome 2', 'valore 2');
//$my_session->my_session_register('nome 3', 'valore 3');
//ho commentato per farne passare solo una
// Chiusura connessione
mysql_close();
?>
E il file test_session.php
codice:
<?php
// inclusione del file che contiene la classe
require('db_session_class.php');
// connessione a MySql
mysql_connect($db_host, $db_user, $db_password);
// selezione del Database
mysql_select_db($db_name);
// Istanziamo l'oggetto
$my_session = new my_session($session_time, $session_gc_time);
// Aggiorniamo, se necessario, la sessione "allungando la vita" del cookie
$my_session->my_session_start();
// Inizializziamo l'array che conterrà i dati della sessione
$_MY_SESSION_VARS = array();
/* Richiamiamo il metodo che ci restituirà le variabili di sessione, e memorizziamo
le stesse nell'array $_MY_SESSION_VARS; in alternativa avremmo potuto ottenere il
valore di una sola variabile, specificandone il nome come argomento del metodo */
$_MY_SESSION_VARS = $my_session->my_session_read();
/* In questo semplice esempio ci limitiamo a stampare a video,
formattandole, tutte le variabili di sessione registrate,
ovviamente possiamo farne l'utilizzo desiderato */
echo "<pre>\n";
print_r($_MY_SESSION_VARS);
echo "</pre>\n";
// Chiusura connessione
mysql_close();
?>
In localhost funziona tutto perfettamente.
In remoto cambia solo il file db.inc.php relativamente ai parametri di connessione al database. E se provo a lanciare start.session.php mi ritorna questo messaggio di errore:
Warning: Cannot modify header information - headers already sent by (output started at /home/mhd-01/www.xxxx.x/htdocs/db_session_class.php:77) in /home/mhd-01/www.xxxx.x/htdocs/db_session_class.php on line 22
Cosa c'è che non va? Grazie