La clase no tiene que tener salida de nada a la vista. El constructor solo se encarga de armar las variables y conexiones.
Te dejo una muy básica, ya la tienes que adaptar para que funcione con tu proyecto.
Tienes que poner los archivos index.php y class.sessions.php en el mismo directorio.
Abres index.php en el navegador despues de crear la tabla y editar los datos de conexión en la clase sessions.
Si cambias alguna variable de la clase, asegurate que has cambiado todas de la misma forma, si no podrás encontrarte errores y no funcionará correctamente.
Pruébala e intenta entender su funcionamiento antes de cambiar algo.
La tabla: MySql
La clase sessions:
Código PHP:
Ver original<?php
/** Error Report */
//comentar las dos líneas siguientes para evitar el reporte de errores
/**
* Class para controlar sessiones
* class.sessions.php
*/
class sessions
{
private $php_session_id;
private $native_session_id;
private $session_timeout = 900; //tiempo en segundos de inactividad - 900 = 15 minutos
private $session_lifespan = 1800; //tiempo total en segundos de la session - 1800 = 30 minutos
private $sDB; // select DB
private $cDB; // conect DB
private $dDB = array('localhost', 'root', 'root', 'forosdelweb'); // datos DB, por defecto root, root
/**
* constructor
*/
public function __construct()
{
//conexión a la db
$this->cDB = mysql_connect(!$this->dDB[0] ?
'localhost' : $this->dDB[0], $this->dDB[1], $this->dDB[2])
//estableces el controlador
array(&$this, '_open_method'), array(&$this, '_close_method'), array(&$this, '_read_method'), array(&$this, '_write_method'), array(&$this, '_destroy_method'), array(&$this, '_gc_method') );
if( isset($_COOKIE["PHPSESSID"]) ) {
//seguridad y comprobación de tiempo
$this->php_session_id = $_COOKIE["PHPSESSID"];
$select = "SELECT id FROM sessions WHERE session_id = \"$this->php_session_id\" ";
$select.= "AND (($time - created) < '$this->session_lifespan') ";
$select.= "AND (($time - last_impression) <= '$this->session_timeout' ";
$select.= "OR last_impression IS NULL)";
{
//eliminar de la base de datos; al mismo tiempo, eliminar la basura
$select = "DELETE FROM sessions ";
$select.= "WHERE (session_id = '$this->php_session_id') ";
$select.= "OR ($time - created > '$this->session_lifespan')";
//deshacerse de esta... obligamos a PHP a darnos una válida
unset($_COOKIE["PHPSESSID"]); }
}
//el sesion start ya lo das aquí, no necesitas ponerlo en el resto de archivos.
}
/**
* Realiza impresiones de tiempo por cada petición.
*/
public function impress()
{
if( $this->native_session_id )
{
$result = mysql_query("UPDATE sessions SET last_impression = $time WHERE id = '$this->native_session_id'"); }
}
/**
* retorna el sesid del usuario
*/
public function getSessionId()
{
return $this->php_session_id;
}
public function getConect()
{
return $this->cDB;
}
/**
* open method
* @param type $save_path
* @param type $session_name
* @return type
*/
private function _open_method($save_path, $session_name)
{
//no hacer nada
return true;
}
/**
* close method
* @return type
*/
public function _close_method()
{
return true;
}
/**
* read method
* @param type $id
* @return type
*/
public function _read_method($id)
{
$this->php_session_id = $id;
//comprobar si existe en la base de datos o no
$result = mysql_query("SELECT id FROM sessions WHERE session_id = '$id'"); {
$this->native_session_id = $row["id"];
}
else
{
//tenemos que crear una entrada en la base de datos
$result = mysql_query("INSERT INTO sessions(session_id, created) VALUES ('$id', '$time')");
//obtenemos el ID verdadedro
$result = mysql_query("SELECT id FROM sessions WHERE session_id = '$id'"); $this->native_session_id = $row["id"];
}
//devolver un string vacío
return '';
}
/**
* write method
* @param type $id
* @param type $sess_data
* @return type
*/
public function _write_method($id, $sess_data)
{
return true;
}
/**
* destroy method
* @param type $id
* @return type
*/
private function _destroy_method($id)
{
$result = mysql_query("DELETE FROM sessions WHERE session_id = '$id'"); return $result;
}
/**
* gc method
* @param type $maxlifetime
* @return type
*/
private function _gc_method($maxlifetime)
{
return true;
}
}
?>
Un archivo para probarla:
Código PHP:
Ver original<?php
require_once('class.sessions.php');
$session = new sessions();
$session->impress();
/**
* index.php
* Esto va en todas las páginas
* No debes poner NADA antes de este código
*
* La conexión está ya incluida en la clase
*/
?>
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
Estado de la conexión: <?php
//conexión a la db
echo ( mysql_connect())?
'Está conectada.': 'No está conectada.'; ?>
<br />
<br />
El id de sesion actual es: <?php echo $session->getSessionId() ?>
<br />
<br />
<?php
//puedes trabajar añadiendo directamente la conexión ala query con:
//$session->getConect();
$select = 'SELECT id, session_id, last_impression, created ';
$select.= 'FROM sessions ';
$select.= "WHERE session_id = '" . $session->getSessionId() . "'";
{
}
?>
Datos de la DB:<br />
Id: <?php echo $row['id'] ?> <br />
Session: <?php echo $row['session_id'] ?> <br />
Ultima impresión: <?php echo $row['last_impression'] ?> <br />
Creada:: <?php echo $row['created'] ?>
</body>
</html>
Saludos,