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:
Il dile db_session_class.php: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 ?>
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:
E il file test_session.phpcodice:<?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(); ?>
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

Rispondi quotando
