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;
// }
}
?>
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();
}
}
?>
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();
?>
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;
}