Tras mucho googlear, al final veo que lo mas recomendado es siempre guardar la session en la bd, pues me he puesto a ello, y funciona cuando hago un ejemplo sencillo, pero hago la prueba con un login, dentro del cual compruebo que el user y pass introducidos esten en la bd, pues bien en ese momento ya peta, bueno mas que petar, me hace bien el login, pero tras hacerme el login le digo que guarde los valores en la session y no los guarda aparece un Warning: mysql_query(): 4 is not a valid MySQL-Link resource in
El codigo que provoca el fallo es el siguiente:
Código PHP :
$bd = new basededatos();
$query = "SELECT * FROM usuarios WHERE id='{$usuario}'";
$resultado = $bd->consultar($query);
$bd->desconectar();
$_SESSION['login'] = true;
$_SESSION['usuario'] = $usuario;
El fichero donde tengo las funciones de bd el codigo es el siguiente:
Código PHP :
<?php
Class basededatos {
private $id_conect;
public function __construct($host = 'localhost', $usuario = 'XXXX', $pass = 'XXXX', $bd = pruebas'){
$id_conect = mysql_connect($host,$usuario,$pass);
$bool = mysql_select_db($bd);
if(!$id_conect || !$bool) throw new Exception("Error de conexion a la Base de Datos");
else $this->id_conect = $id_conect;
}
public function consultar($query){
$id_query = mysql_query($query);
if($id_query) {
$vector = array();
$i = 0;
while($fila = mysql_fetch_assoc($id_query)){
$vector[$i] = $fila;
++$i;
}
return $vector;
}
else throw new Exception("Error de query");
}
public function sentencia($query){
$id_query = mysql_query($query);
if($id_query) return true;
else throw new Exception("Error de query");
}
public function desconectar(){
if (mysql_close($this->id_conect) == 0) throw new Exception("Error al desconectar");
}
}
?>
El fichero de las sessiones en bd:
Código PHP :
<?php
class Session {
public function __construct(){
session_set_save_handler(array(&$this, 'open'),array(&$this, 'close'),array(&$this, 'read'),array(&$this, 'write'),array(&$this, 'destroy'),array(&$this, 'clean'));
session_start();
}
public function open() {
$this->mysql = mysql_connect('localhost', 'XXXX', 'XXXX');
$bSeldb = mysql_select_db('pruebas', $this->mysql);
if (!$bSeldb) {
die ('Can\'t use Database : ' . mysql_error());
}
}
public function write($id, $data) {
$access = time();
$id = mysql_real_escape_string($id);
$access = mysql_real_escape_string($access);
$data = mysql_real_escape_string($data);
$sql = "REPLACE INTO sessions VALUES ('$id', '$access', '$data')";
return mysql_query($sql, $this->mysql) or die(mysql_error());
}
public function read($id) {
$id = mysql_real_escape_string($id);
$sql = "SELECT data FROM sessions WHERE id = '$id'";
if ($result = mysql_query($sql, $this->mysql)) {
if (mysql_num_rows($result)) {
$record = mysql_fetch_assoc($result);
return $record['data'];
}
}
return '';
}
public function destroy($id) {
$id = mysql_real_escape_string($id);
$sql = "DELETE FROM sessions WHERE id = '$id'";
return mysql_query($sql, $this->mysql);
}
public function clean($max) {
$old = time() - $max;
$old = mysql_real_escape_string($old);
$sql = "DELETE FROM sessions WHERE access < '$old'";
return mysql_query($sql, $this->mysql);
}
public function close() {
mysql_close($this->mysql);
}
}
?>
Alguna sugerencia???