Te hago algunas sugerencias partiendo del
estándar de PHP:
- Nombre de archivos de clases: de class.mysql.php a Mysql.php
- Nombre de clase en mayusculas
- Llaves de clase y métodos abajo (como dice el estándar)
- Aunque los métodos sean por defecto públicos, usar la nomenclatura completa agregando "public"
- Constructor con palabra reservada
- Si siempre vas a usar la conexión con la bd, puede ser una relación de "asociación" y la conviertes en un atributo
- Cambiaría el diseño agregando una clase SessionPersistencia, y MySQL por DB genérica, así no te atas a una base particular
Faltaría
- Agregar la clase Usuario, no manejar el nombre, siempre el objeto y pedirle al mismo el nombre (POO)
Va el ejemplo:
Código PHP:
<?php
/*Archivo: SessionPersistencia.php */
require_once 'Db.php';
class SessionPersistencia extends Db
{
private $_db;
public function __construct()
{
$this->db = new db();
}
/*
* etcétera, los demás métodos, todo en un archivo aparte
*/
}
Código PHP:
<?php
/*Archivo: Session.php*/
require_once 'SessionPersistencia.php';
class Session
{
private $_persistencia;
private $_usuario;
private $_token;
public function __construct($nombre_usuario = null)
{
session_start();
$this->_persistencia= new SessionPersistencia();
if(!is_null($nombre_usuario)){
$this->_usuario = new Usuario($usuario);
$this->_token = $this->_generarToken($usuario);
/*
* Dentro podrías actualizar los valores
* de sesión en conjunto con los de la base
*/
$_persistencia->update($this);
}
}
public function getUsuario()
{
return $this->_usuario;
}
public function getToken()
{
return $this->_token;
}
private function _generarToken($text)
{
return md5(rand().$text);
}
public statis function getStatus()
{
$session = new Session();
if(!empty($_SESSION['usuario']) && !empty($_SESSION['token'])) {
$token = $this->_persistencia->getToken($_SESSION['usuario']);
if($_SESSION['token'] == $token){
$this->_usuario = new Usuario($_SESSION['usuario']);
$this->_token = $this->_generarToken($usuario);
$_persistencia->update($this);
}else {
exit;
}
}
}
public function __destruct()
{
session_destroy();
header("Location: index.php");
}
}
?>
Forma de probarlo.
Código PHP:
<?php
$session = new Session ("usuario");
Session::getStatus();
?>
Se pueden hacer varias modificaciones al diseño, pero bueno, es un ejemplo medio rápido y pueden existir errores o detalles que hay que arreglar.
Espero que el ejemplo te permita tener otro punto de vista un poco distinto al que venías haciendo.