Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/08/2008, 11:26
Avatar de enriqueplace
enriqueplace
 
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años, 8 meses
Puntos: 32
Respuesta: Como mejorar clase sesion

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.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Última edición por enriqueplace; 08/08/2008 a las 07:35 Razón: Mal indentada una llave