Foros del Web » Programando para Internet » PHP »

Codigo que no entiendo

Estas en el tema de Codigo que no entiendo en el foro de PHP en Foros del Web. Hola, ... SI tienes que crear una tabla y es con el nombre que quieras pero por defecto se llama "sesiones" ...... y es un ...
  #1 (permalink)  
Antiguo 04/02/2009, 13:55
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Codigo que no entiendo

Hola, ... SI tienes que crear una tabla y es con el nombre que quieras pero por defecto se llama "sesiones" ...... y es un objeto asi que deberias hacer algo asi:



Código PHP:
<?
Include "manejoSesiones.class.php";

// estimo que el LINK con el que creas la coneccion a MySQL es $con

$mi_sesion = new manejoSesiones();
$mi_sesion->tiempoExpirado=1800// 1800 segundos = 1 hora
$mi_sesion->abrirSesion (??????); // aca ya no entiendo........
?>
Lo que no comprendo es donde define $savePath, $sessionID como atributos de la clase....

SUGIERO pasen este post a PHP ORIENTADO A OBJETOS

Por que no miras en ese mismo foro donde dicen como se implementa ?

Clase:

Código PHP:
<?php
class manejoSesiones {
    var 
$tiempoExpirado;
    var 
$tablaSesiones "sesiones";
    
    function 
abrirSesion($savePath$sessionID) {
        global 
$con;
        
        return 
true;
    }
    
    function 
cerrarSesion() {
        global 
$con;
        
        
$this->tiempoExpirado ini_get('session.gc_maxlifetime');
        
        
$this->recolector($this->tiempoExpirado);
        return 
true;
    }
    
    function 
leerSesion($sessionID) {
        global 
$con;
        
        
$sql "SELECT * FROM ".$this->tablaSesiones." WHERE sessionID = '$sessionID'";
        
$result mysql_query($sql);
        
        if(!
$result) { return false; }
        
        
$num mysql_num_rows($result);
        if(
$num 0) {
            
$data mysql_fetch_assoc($result);
            return 
$data['sessionData'];
        }else{
            return 
false;
        }
    }
    
    function 
escribirSesion($sessionID$sessionData) {
        global 
$con;
        
        
$sql "UPDATE ".$this->tablaSesiones." SET sessionData = '$sessionData' WHERE sessionID = '$sessionID'";
        
$result mysql_query($sql);
        
        if(
mysql_affected_rows()) { 
            return 
true;
        }else{
            
$sql "INSERT INTO ".$this->tablaSesiones." (sessionID, sessionStart, sessionData) VALUES ('$sessionID','".time()."','$sessionData')";
            
$result mysql_query($sql);
            return (!
$result) ? false true ;
        }
    }
    
    function 
borrarSesion($sessionID) {
        global 
$con;
        
        
$sql "DELETE FROM ".$this->tablaSesiones." WHERE sessionID = '$sessionID'";
        
$res mysql_query($sql);
        return (!
$res) ? false true ;
    }
    
    function 
recolector($tiempo) {
        global 
$con;
        
        
$sql "DELETE FROM ".$this->tablaSesiones." WHERE ".time()." > (sessionStart + ".$tiempo.")";
        
$res mysql_query($sql);
        return (!
$res) ? false true ;
    }
}
?>
Implementacion:

Código PHP:
<?php
//ini_set()
ini_set('session.gc_maxlifetime'3600);
ini_set('session.cookie_lifetime'3600);

//Conexion a la BD

$con = @mysql_connect($dbHost$dbUser$dbPass);
@
mysql_select_db($dbName$con);
include(
"includes/manejoSesiones.class.php");

//Manejo de sesiones (ojala y sirva o.oU)
$sesionOA = new manejoSesiones();
session_set_save_handler(array(&$sesionOA,'abrirSesion'),array(&$sesionOA,'cerrarSesion'),array(&$sesionOA,'leerSesion'),array(&$sesionOA,'escribirSesion'),array(&$sesionOA,'borrarSesion'),array(&$sesionOA,'recolector'));
session_start();
?>
Pienso que hay algo "mal" conceptualmente con esa clase.....porque para definir el tiempo de vida de sesion (por ejemplo) no lo hace con un metodo de la clase..... ademas.....el atributo tiempo no tiene un setter

Última edición por Italico76; 05/02/2009 a las 07:55
  #2 (permalink)  
Antiguo 04/02/2009, 14:42
 
Fecha de Ingreso: noviembre-2007
Mensajes: 229
Antigüedad: 16 años, 5 meses
Puntos: 0
Codigo que no entiendo

Buenas:

tengo este codigo para saber que usuarios estan conectados en mi pagina web...

pero no tengo ni idea de como ponerlo en mi pagina si tengo que crear una tabla para esto...ni idea alguien que sepa como fucniona me lo puede explicar?

merciii

manejoSesiones.class.php

Código PHP:

<?php
class manejoSesiones {
    var 
$tiempoExpirado;
    var 
$tablaSesiones "sesiones";
    
    function 
abrirSesion($savePath$sessionID) {
        global 
$con;
        
        return 
true;
    }
    
    function 
cerrarSesion() {
        global 
$con;
        
        
$this->tiempoExpirado ini_get('session.gc_maxlifetime');
        
        
$this->recolector($this->tiempoExpirado);
        return 
true;
    }
    
    function 
leerSesion($sessionID) {
        global 
$con;
        
        
$sql "SELECT * FROM ".$this->tablaSesiones." WHERE sessionID = '$sessionID'";
        
$result mysql_query($sql);
        
        if(!
$result) { return false; }
        
        
$num mysql_num_rows($result);
        if(
$num 0) {
            
$data mysql_fetch_assoc($result);
            return 
$data['sessionData'];
        }else{
            return 
false;
        }
    }
    
    function 
escribirSesion($sessionID$sessionData) {
        global 
$con;
        
        
$sql "UPDATE ".$this->tablaSesiones." SET sessionData = '$sessionData' WHERE sessionID = '$sessionID'";
        
$result mysql_query($sql);
        
        if(
mysql_affected_rows()) {
            return 
true;
        }else{
            
$sql "INSERT INTO ".$this->tablaSesiones." (sessionID, sessionStart, sessionData) VALUES ('$sessionID','".time()."','$sessionData')";
            
$result mysql_query($sql);
            return (!
$result) ? false true ;
        }
    }
    
    function 
borrarSesion($sessionID) {
        global 
$con;
        
        
$sql "DELETE FROM ".$this->tablaSesiones." WHERE sessionID = '$sessionID'";
        
$res mysql_query($sql);
        return (!
$res) ? false true ;
    }
    
    function 
recolector($tiempo) {
        global 
$con;
        
        
$sql "DELETE FROM ".$this->tablaSesiones." WHERE ".time()." > (sessionStart + ".$tiempo.")";
        
$res mysql_query($sql);
        return (!
$res) ? false true ;
    }
}
?>
y esto es lo que tengo puesto en la pagina donde inicio sesion...

sesion.php

Código PHP:
//Conexion a la BD
<?php


//ini_set()
ini_set('session.gc_maxlifetime'3600);
ini_set('session.cookie_lifetime'3600);




include(
"includes/manejoSesiones.class.php");

//Manejo de sesiones (ojala y sirva o.oU)
$sesionOA = new manejoSesiones();
session_set_save_handler(array(&$sesionOA,'abrirSesion'),array(&$sesionOA,'cerrarSesion'),array(&$sesionOA,'leerSesion'),array(&$sesionOA,'escribirSesion'),array(&$sesionOA,'borrarSesion'),array(&$sesionOA,'recolector'));
session_start();
?>
  #3 (permalink)  
Antiguo 04/02/2009, 15:02
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Codigo que no entiendo

¿De la pagina del cual sacaste ese codigo no explican como usarlo? No vino un README file junto con la clase?
  #4 (permalink)  
Antiguo 04/02/2009, 15:13
 
Fecha de Ingreso: noviembre-2007
Mensajes: 229
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Codigo que no entiendo

Cita:
Iniciado por Ronruby Ver Mensaje
¿De la pagina del cual sacaste ese codigo no explican como usarlo? No vino un README file junto con la clase?
no porque lo saque de un foro y no ponia nada mas...
  #5 (permalink)  
Antiguo 05/02/2009, 06:57
 
Fecha de Ingreso: noviembre-2007
Mensajes: 229
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Codigo que no entiendo

aqui dejo el link del foro donde lo sake...


no consigo encontrar la manera de utilizarlo...

necesito ayuda por favor..


http://www.php-hispano.net/foros/PHP/15245
  #6 (permalink)  
Antiguo 05/02/2009, 07:52
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Codigo que no entiendo

Cita:
aqui dejo el link del foro donde lo sake...
Si te fijas.........yo ya lo habia puesto

Cita:
Por que no miras en ese mismo foro donde dicen como se implementa ?
__________________
Salu2!
  #7 (permalink)  
Antiguo 05/02/2009, 10:35
 
Fecha de Ingreso: noviembre-2007
Mensajes: 229
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Codigo que no entiendo

yo me leido ese foro pero sige sin funcionarme os pongo el codigo entero de mi pagina...

y le he creado una tabla que se llama sesiones con el siguiente codigo...

CREATE TABLE `sesiones` (
`sessionID` varchar(255) NOT NULL default '',
`sessionStart` varchar(255) NOT NULL default '',
`sessionData` varchar(255) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=ascii;

este es del archivo ( db.php)

Código PHP:
//este archivo conecta la base de datos

$db_host="localhost"//the host name of the sql server (if you do not know, leave as localhost. usually works)
$db_name="trekstor";  //the name of the database
$db_user="root";  //the username that is associated with the database
$db_pass=""//the password for the username

//DO NOT MODIFY ANYTHING ELSE APART FROM THE ABOVE UNLESS YOU ARE SURE YOU KNOW WHAT YOU ARE DOING!

$dbc=mysql_connect($db_host,$db_user,$db_pass) OR DIE (mysql_error());
$dbs=mysql_select_db($db_name) OR DIE (mysql_error()); 
este es el del archivo (login.php)


Código PHP:
//este archivo me abre la session
include("codes/db.php");
include(
"codes/manejoSesiones.class.php");
$sesionOA = new manejoSesiones();
session_set_save_handler(array(&$sesionOA,'abrirSesion'),array(&$sesionOA,'cerrarSesion'),array(&$sesionOA,'leerSesion'),array(&$sesionOA,'escribirSesion'),array(&$sesionOA,'borrarSesion'),array(&$sesionOA,'recolector'));

session_start(); //start the session

  
$username=$_POST['usuario']; //Get the username the user has entered
  
$password=$_POST['pass']; //Get the password the user has entered
 
$password=md5($password); //turn the password they entered into md5 to compare with the DB
  
$loginname=$_SESSION['username'];
//check to see if logged in allready
if (isset($_SESSION['loggedin'])){
die(
"You are logged in<br><a href='logout.php'>Click here to logout</a>");
//if not logged in, then run other script instead
}else{
//find if the page was enterd by the login button
if (isset($_POST['submit'])){
  
//if username was entered, continue
  
if($username && $password){
      
$result=mysql_query($sql);
      
//If the user gets to here, then they have typed both a username and password, so we may now go onto finding out if they excist in the DB
      
$sql="SELECT * FROM administradores WHERE (administrador='$username') AND password='$password'"//get rows where the username feild matches the username or email feild in the database with same password
      
$result=mysql_query($sql);
      
//check to see if the account is activated
      
$moorow=mysql_fetch_array($result);
     
      
//if there was a row returned, then obiously there is an account with the correct username/password. They may login!
        
if (mysql_num_rows($result) > 0){
        
$_SESSION['loggedin']="TRUE"//set the global session varible for loggedin to true
        
$row=mysql_fetch_array($result);
        
$_SESSION['username']=$username;
         
//setcookie("usuario", $username, time() + 31536000);   
        // setcookie("pass", $password, time() + 31536000);
        
$sql="SELECT sexo FROM administradores WHERE administrador='$username'"
            
$result=mysql_query($sql);
            
$sex=mysql_result($result,0,0);
         
$_SESSION['sexo']=$sex;
        
mysql_free_result($result);
         
header("Location: admin.php");
        
//die("Welcome $username You are now logged in");
        
}else{
        
header("Location: index.php?msg=err");
        
        }
       
  }else{
  
header("Location: index.php?msg=not");
  }
}
}




?> 

este es el archivo (ifsesion.php)

Código PHP:
//este archivo se encarga de redireccionar a los no logueados para la pagina de logueo...

include("db.php");
  
        
include(
"codes/manejoSesiones.class.php");

                               

$sesionOA = new manejoSesiones();
session_set_save_handler(array(&$sesionOA,'abrirSesion'),array(&$sesionOA,'cerrarSesion'),array(&$sesionOA,'leerSesion'),array(&$sesionOA,'escribirSesion'),array(&$sesionOA,'borrarSesion'),array(&$sesionOA,'recolector'));
//$pass=$_COOKIE["pass"];
session_start();

if (!isset(
$_SESSION['loggedin'])){
    
    
$logerr=$HTTP_GET_VARS["msg"];

      switch(
$logerr){
          case 
"err";
              
$logerr="Usuario y/o Contraseña no es válido";
              break;
          case 
"not";
              
$logerr="Introduzca Usuario y Contraseña";
              break;
        default;
              
$logerr="";
              break;
      }
        include(
"logincode.php");
    exit;
}else{

$sex=$_SESSION['sexo']; //define si es chico o chica     
$user=$_SESSION['username'];
$user=ucwords($user);






y este es el archivo (manejoSesiones.class.php)

Código PHP:

<?php
class manejoSesiones {
    var 
$tiempoExpirado;
    var 
$tablaSesiones "sesiones";
    
    function 
abrirSesion($savePath$sessionID) {
        global 
$dbc;
        
        return 
true;
    }
    
    function 
cerrarSesion() {
        global 
$dbc;
        
        
$this->tiempoExpirado ini_get('session.gc_maxlifetime');
        
        
$this->recolector($this->tiempoExpirado);
        return 
true;
    }
    
    function 
leerSesion($sessionID) {
        global 
$dbc;
        
        
$sql "SELECT * FROM ".$this->tablaSesiones." WHERE sessionID = '$sessionID'";
        
$result mysql_query($sql);
        
        if(!
$result) { return false; }
        
        
$num mysql_num_rows($result);
        if(
$num 0) {
            
$data mysql_fetch_assoc($result);
            return 
$data['sessionData'];
        }else{
            return 
false;
        }
    }
    
    function 
escribirSesion($sessionID$sessionData) {
        global 
$dbc;
        
        
$sql "UPDATE ".$this->tablaSesiones." SET sessionData = '$sessionData' WHERE sessionID = '$sessionID'";
        
$result mysql_query($sql);
        
        if(
mysql_affected_rows()) {
            return 
true;
        }else{
            
$sql "INSERT INTO ".$this->tablaSesiones." (sessionID, sessionStart, sessionData) VALUES ('$sessionID','".time()."','$sessionData')";
            
$result mysql_query($sql);
            return (!
$result) ? false true ;
        }
    }
    
    function 
borrarSesion($sessionID) {
        global 
$dbc;
        
        
$sql "DELETE FROM ".$this->tablaSesiones." WHERE sessionID = '$sessionID'";
        
$res mysql_query($sql);
        return (!
$res) ? false true ;
    }
    
    function 
recolector($tiempo) {
        global 
$dbc;
        
        
$sql "DELETE FROM ".$this->tablaSesiones." WHERE ".time()." > (sessionStart + ".$tiempo.")";
        
$res mysql_query($sql);
        return (!
$res) ? false true ;
    }
}
?>

Última edición por scorpionhack; 05/02/2009 a las 10:54
  #8 (permalink)  
Antiguo 05/02/2009, 14:13
 
Fecha de Ingreso: noviembre-2007
Mensajes: 229
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Codigo que no entiendo

creo que el problema está en los campos de la tabla en la base de datos...

puede alguien ayudarme?
  #9 (permalink)  
Antiguo 05/02/2009, 14:46
 
Fecha de Ingreso: noviembre-2007
Mensajes: 229
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Codigo que no entiendo

bueno ya he conseguido que el codigo funcione mas o menos, he conseguido que en la BD me ponga esto en sesiones:

Código:
 ('62f028dde1f627cd48360fa7a7c2114b', '1233866270', 'loggedin|s:4:"TRUE";username|s:6:"javier";sexo|s:1:"o";')
el primero corresponde a SessionID el segundo a SessionStart y el tercero a SessionData

lo que pasa que ahora si entra un usuario no registrado en la web tambien me lo pone en la base de datos y si uno con session entra i va navegando cada vez que clicka en un link de mi web( como lo tengo puesto el "session_set_save_handler" en el codigo que verifica si el usuario esta logueado o no, pues me lo repite siempre...)" asi que he decidido quitarlo de alli pero entonces no me deja loguearme...

AYUDA POR FAVOR...

GRACIAS
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 01:23.