Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Clases y sesiones

Estas en el tema de Clases y sesiones en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estoy escribiendo una clase desde la cual manejo la base de datos y el acceso de los usuarios, tengo una pagina con un formulario de ...
  #1 (permalink)  
Antiguo 28/11/2008, 06:36
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Clases y sesiones

Estoy escribiendo una clase desde la cual manejo la base de datos y el acceso de los usuarios, tengo una pagina con un formulario de login, al ingresar el ususario y la clave todo parece estar funcionando bien, incluso si todo es correcto me da el mensajes de bienvenida: Bienvenido <nombre de usuario>, pero cuando a esa pagina una vez logeado le pulso la tecla F5 para actualizarla, se pierde la sesión y me vuelve a mostrar el formulario de login.

Les paso el código:

Esta es la clase:
Código PHP:
require("global.php");

class 
DB
{
    private 
$con;
    private 
$pInicio;
    private 
$pLogin;
    private 
$pRegistro;
    public 
$MsgError;
    
    private function 
Conectar()
    {
        
$this->con mysql_connect(HOSTUSPW) or die("Error de conexión al servidor.");
        
mysql_select_db(DBASE$this->con) or die("Error al conectar con la base de datos.");
    }
    
    public function 
__construct()
    {
        
$this->pInicio PAGINA_INICIO;
        
$this->pLogin PAGINA_LOGIN;
        
$this->pRegistro PAGINA_REGISTRO;
        
$this->Conectar();
    }
    
    public function 
NumeroFilas($rs)    
    {
        if (!
$rs) {
            echo 
"La consulta no es válida, no se puede extraer el número de filas.";
        }
        else {
            return 
mysql_num_rows($rs);
        }
    }
    
    public function 
NumeroCampos($rs)
    {
        if (!
$rs) {
            echo 
"La consulta no es válida, no se puede extraer el nñumero de campos.";
        }
        else {
            return 
mysql_num_fields($rs);
        }
    }
    
    public function 
Consulta($sql)
    {
        if (empty(
$sql)) {
            echo 
"La sentencia SQL no es válida.";
        }
        else {
            return 
mysql_query($sql$this->con);
        }
    }
    
    public function 
VerificarSession()
    {
        if (!isset(
$_SESSION["us"])) {
            
session_unset();
            
session_destroy();
        }
    }
    
    public function 
MostrarLogin()
    {
        
$muestra "";
        
        if (isset(
$_SESSION["us"])) {
            
$muestra "Bienvenido(a) " $_SESSION["us"];
            
$muestra .= " | " "<a href = '" $this->Salir() . "'>Salir</a>";
            echo 
$muestra;
        }
        else {
            include(
"minilogin.php");
        }
    }
    
    public function 
Salir()
    {
        
session_unset();
        
session_destroy();
        
        
$out "<script type = 'text/javascript'>";
        
$out .= "location.href = " $this->pInicio;
        
$out .= "</script>";
    }
    
    public function 
Logearse($usuario$clave)
    {
        
$rs $this->Consulta("SELECT * FROM " TABLA_USUARIOS " WHERE us_name = '" $usuario "' AND us_clave = '" $clave ."'");
        
$result = ($this->NumeroFilas($rs)) ? 0;
        
        if (
$result == 1) {
            
$_SESSION["us"] = $usuario;
        }
        
        
header("Location: " $this->pInicio);
    }

Este es el formulario:
Código PHP:
<?php
session_start
();

require(
"php/db.class.php");
$inicl = new DB();

//$inicl->VerificarSession();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<?php
echo $inicl->MostrarLogin();
?>
</body>
</html>
Aquí se procesan los datos que ingreso en el formulario:
Código PHP:
<?php
session_start
();

require(
"php/db.class.php");
$inicl = new DB();

if (isset(
$_POST["usuario"]) && isset($_POST["clave"])) {
    
$usu $_POST["usuario"];
    
$clv $_POST["clave"];
    
    
$inicl->Logearse($usu$clv);
}
?>
Por favor, si detectan el error o porque se pierde la sesion al actualizar la página, espero que me puedan ayudar.
__________________
El aprendiz.
  #2 (permalink)  
Antiguo 28/11/2008, 15:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Clases y sesiones

Bueno viendo por encima no creo que ese sea el problema, más bien en tu función mostrarLogin haces llamada a $this->Salir(); que causa que se cierre tu sesion.

Saludos.
  #3 (permalink)  
Antiguo 28/11/2008, 18:19
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Respuesta: Clases y sesiones

No me había dado cuenta de ese detalle, tienes razón, ese era el problema, ahora todo marcha bien, gracias.
__________________
El aprendiz.
  #4 (permalink)  
Antiguo 02/12/2008, 08:46
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Clases y sesiones

Estimado, ya que estamos y viendo tú código, sugiero que sigas el estándar de codificación de PHP especificado por la empresa Zend (metodos inician en minúsculas, etc).
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:38.