sto leggendo questo tutorial:
http://php.html.it/articoli/leggi/87...tive-in-php/1/
ho preso la parte dove gestisce le sessioni con file di testo e non con DB.
Avviando il testo con test_session.php( credo sia questa la pagina per il test, anche eprchè non la indica nel tutorial), purtroppo mi restituisce questo errore:
Warning: Cannot modify header information - headers already sent by (output started at websites\sessioni\config.inc.php:10) in websites\sessioni\file_session_class.php on line 24
questa è la test_session.php
codice:
<?php
// inclusione del file che contiene la classe
require('file_session_class.php');
// Istanziamo l'oggetto
$my_session = new my_session($session_dir, $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 */
$_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 '';
print_r($_SESSION_VARS);
echo '';
?>
questo è quanto contiene config.inc.php
codice:
<?php
// valori espressi in secondi
$session_time = 0; // durata del cookie
$session_gc_time = 1800; // tempo per l'esecuzione della garbage collection
/* la directory dove memorizzare i dati della sessione,
sui sistemi Unix like, deve avere tuti i permessi (777) */
$session_dir = './test'; // senza slash finale
?>
questo invece file_session_class.php
codice:
<?php
require('config.inc.php');
class my_session {
var $session_dir; // la dir. dove fare lo storage dei dati di sessione
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_dir, $session_time, $session_gc_time) {
$this->my_session_id = (!isset($_COOKIE['my_session_id']))? md5(uniqid(microtime())): $_COOKIE['my_session_id'];
$this->file_name = 'sess_' . $this->my_session_id;
$this->session_dir = $session_dir;
$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);
}
else{
if($this->session_time > 0) setcookie('my_session_id', $this->my_session_id, $cookie_expire);
}
}
// registra le variabili di sessione nel database
function my_session_register($name, $value) {
$session_name = (!isset($_COOKIE['my_session_id'])) ? 'sess_' . $this->my_session_id : $this->file_name;
$_MY_SESSION = array();
if(file_exists($this->session_dir . '/' . $session_name)) {
$_MY_SESSION = unserialize(implode('', file($this->session_dir . '/' . $session_name)));
$_MY_SESSION[$name] = $value;
}
else {
$_MY_SESSION[$name] = $value;
}
$fp = fopen($this->session_dir . '/' . $session_name, 'wb');
fputs($fp, serialize($_MY_SESSION));
fclose($fp);
}
/* legge e restituisce le variabili di sessione
(o la singola variabile specificata */
function my_session_read($key = '') {
if(file_exists($this->session_dir . '/' . $this->file_name)) {
$session_vars = unserialize(implode('', file($this->session_dir . '/' . $this->file_name)));
return (isset($key) && $key) ? $session_vars[$key] : $session_vars;
}
}
// distrugge la sessione, senza cancellare il cookie
function my_session_destroy() {
@unlink($this->session_dir . '/' . $this->file_name);
}
// procedura di garbage collection
function my_session_gc() {
$d = dir($this->session_dir);
while ($entry = $d->read()) {
if($entry != '.' && $entry != '..') {
if(is_dir($entry)) continue;
if(strpos($entry, 'sess_') !== FALSE) {
if((filemtime($this->session_dir . '/' .$entry) + $this->session_gc_time) < time()) {
@unlink($this->session_dir . '/' .$entry);
}
}
}
}
$d->close();
}
}
?>
Sapete dirmi perchè mi restituisce quell'errore?
Grazie mille.....