Foros del Web » Programando para Internet » PHP »

Problema con session_set_save_handler

Estas en el tema de Problema con session_set_save_handler en el foro de PHP en Foros del Web. Hola, estoy haciendo un sistema para que se logueen una sola vez y puedan acceder a distintas aplicaciones según los permisos que tengan. Las aplicaciones ...
  #1 (permalink)  
Antiguo 23/08/2013, 06:47
Avatar de ramoneariel  
Fecha de Ingreso: abril-2008
Mensajes: 17
Antigüedad: 16 años
Puntos: 0
Exclamación Problema con session_set_save_handler

Hola, estoy haciendo un sistema para que se logueen una sola vez y puedan acceder a distintas aplicaciones según los permisos que tengan.
Las aplicaciones están en distintos servidores de la red.
Estoy usando session_set_save_handler. Buscando por muchos lados encontré que era la mejor solución, guardar las sesiones en mysql.
El problema es que cuando redirecciona al index.php no tengo la session guardada y no puedo acceder a los datos de session, pero si me guarda los datos en mysql.
Creo que el mayor problema es que no se como utilizar estas clases...

Si alguien puede explicarme como utilizarla estaría muy agradecido. Es decir como utilizar los datos una vez almacenados.

Gracias de antemano.

Estoy usando estas clases:


session_data.php

Código PHP:
<?php

class SessionData
{
   private 
$dbHost  'localhost';
   private 
$dbUser  'root';
   private 
$dbPass  'prueba';
   private 
$dbName  'login';
   private 
$dbTable 'sessions';


   private 
$db;
 
   public function 
__construct(mysqli $db null)  {
      if(isset(
$db))
      {
         
$this->db $db;
      }
      else
      {
         
$this->db = new mysqli(
            
$this->dbHost,
            
$this->dbUser,
            
$this->dbPass
         
);
         if(
$this->db->connect_errno)
         {
            throw new 
Exception($this->db->connect_error);
         }
      }
   }
 

   public function 
get($id)   {
      
$sql "SELECT `data` FROM `{$this->dbName}`.`{$this->dbTable}` " .
             
"WHERE `id` = ?";
      if(
$stmt $this->db->prepare($sql))
      {
         if(
$stmt->bind_param('s'$id))
         {
            if(
$stmt->execute())
            {
               
$stmt->bind_result($data);
               if(
$stmt->fetch())
               {
                  return 
$data;
               }
               return 
'';
            }
            
error_log($this->stmt->error);
         }
         
error_log($this->stmt->error);
      }
      
error_log($this->db->error);
      return 
'';
   }
 

   public function 
set($id$data)   {
      
$sql "REPLACE INTO `{$this->dbName}`.`{$this->dbTable}` " .
             
"(`id`, `data`, `time`) VALUES (?, ?, NOW())";
      if(
$stmt $this->db->prepare($sql))
      {
         if(
$stmt->bind_param('ss'$id$data))
         {
            if(
$stmt->execute() and $stmt->affected_rows)
            {
               return 
true;
            }
            else
            {
               
error_log($stmt->error);
            }
         }
         else
         {
            
error_log($stmt->error);
         }
      }
      else
      {
         
error_log($this->db->error);
      }
      return 
false;
   }
 

   public function 
delete($id)   {
      
$sql "DELETE FROM `{$this->dbName}`.`{$this->dbTable}` " .
             
"WHERE `id` = ?";
      if(
$stmt $this->db->prepare($sql))
      {
         if(
$stmt->bind_param('s'$id))
         {
            if(
$stmt->execute())
            {
               return 
true;
            }
            else
            {
               
error_log($stmt->error);
            }
         }
         else
         {
            
error_log($stmt->error);
         }
      }
      else
      {
         
error_log($this->db->error);
      }
      return 
false;
   }
 

   public function 
clean($seconds)   {
      
$sec = (int) $seconds;
      
$sql "DELETE FROM `{$this->dbName}`.`{$this->dbTable}` " .
             
"WHERE `time` < (NOW() - INTERVAL $sec SECOND)";
      if(
$this->db->query($sql))
      {
         return 
true;
      }
      
error_log($this->db->error);
      return 
false;
   }
 

   
// public function createTable($print = false)   {
      // $sql = <<<EOD
// CREATE TABLE IF NOT EXISTS `{$this->dbName}`.`{$this->dbTable}` (
  // `id` varchar(255) NOT NULL COMMENT 'session ID',
  // `data` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'serialized session array',
  // `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  // PRIMARY KEY (`id`),
  // KEY `time` (`time`)
// ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
// EOD;
      // if($print)
      // {
         // return $sql;
      // }
      // else
      // {
         // $this->db->query($sql);
         // if($this->db->errno)
         // {
            // user_error($this->db->error);
            // return false;
         // }
      // }
      // return true;
   // }
 
}

?>
session_handle.php

Código PHP:
<?php 

require_once('inc/session_data.php');
//require_once('session_data.php');

class SessionHandler {

   private 
$sd;
   
//private $seconds = '3600';
  
   
public function __construct(SessionData $sd=null)   {
      if(isset(
$sd))
      {
         
$this->sd $sd;
      }
      else
      {
         try
         {
            
$this->sd = new SessionData();
         }
         catch(
Exception $e)
         {
            throw new 
Exception($e);
         }
      }
   }
 
   public function 
open($path$name)   {
      return 
true;
   }
 
   public function 
close()   {
      return 
true;
   }
 
   public function 
read($id)   {
      return 
$this->sd->get($id);
   }
 
   public function 
write($id$data)   {
      return 
$this->sd->set($id$data);
   }
 
   public function 
gc($seconds)   {
      return 
$this->sd->clean($seconds);
   }
 
   public function 
destroy($id)   {
      return 
$this->sd->delete($id);
   }
 
   public function 
__destruct()   {
      
session_write_close();
   }
}
?>
session_prueba.php

Código PHP:
<?php

//require_once'session_handle.php';
require_once'inc/session_handle.php';
try
{
   
$sh = new SessionHandler();
}
catch(
Exception $e)
{
   
error_log((string)$e);
   die(
'Session initialization failed');
}
session_set_save_handler(
   array(
$sh'open'),
   array(
$sh'close'),
   array(
$sh'read'),
   array(
$sh'write'),
   array(
$sh'destroy'),
   array(
$sh'gc')
) or die(
"Session save handler failed");
register_shutdown_function('session_write_close');
session_start();


?>
loguin.php

Código PHP:
include('inc/conectLDAP.php');

    if(
$ds){
    
        
$info=ldap_buscar(0,"cn",$_GET['user']);

            if(
$info['count'] > 0){
            
                if(
$info[0]['carlicense'][0]==$_GET['dni'] ){
                    
                    
$log=ldap_autenticar($info[0]['dn'],trim($_GET['pass']));
                    if(
$log==1){
                    
//session_destroy();
                        
require_once('inc/session_prueba.php');
                            
                        
$_SESSION['uname']=$_GET['user'];
                        
                        
//permisos
                        
for($i=0;$i<count($info[0]['employeetype'])-1;$i++){
                        
$apps[$i]=$info[0]['employeetype'][$i];
                        }            
                        
// if(in_array("ADMIN",$apps)){
                        // echo "<script>alert('".htmlspecialchars(SID)."');</script>";
                            // echo "<script>location.href = 'http://".ADMIN."/login.php?externo&classid=".$_GET['pass']."&user=".$_GET['user']."';</script>";
                        // }
                        
$_SESSION['apps']=$apps;
                        
$_SESSION['logued']=true;
                        
$_SESSION['nombre']=$info[0]['displayname'][0];
                        
                        
//$isd=session_id();
                        //redireccionamiento
                        //echo "<script>location.href = 'http://".host."/?id=".htmlspecialchars(SID)."';</script>";
                        
echo "<script>location.href = 'http://".host."';</script>";

                        
    
                    }else{        
                        echo 
error_auth;
                        echo 
"<script>$('input').val('');</script>";
                        return 
false;
                    }
                }else{
                    echo 
error_auth;
                    echo 
"<script>$('input').val('');</script>";
                    return 
false;
                }
                }else{
                    echo 
no_user;
                    echo 
"<script>$('input').val('');</script>";
                    return 
false;
                }
                
    }else{
        echo 
noldap;
    } 

Etiquetas: session
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 11:40.