Ver Mensaje Individual
  #4 (permalink)  
Antiguo 12/02/2010, 02:42
balder
 
Fecha de Ingreso: septiembre-2005
Mensajes: 99
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Necesito ejemplo de sesiones con session_set_save_handler

Os lo agradezco, pero esto ya lo he visto, el fichero con las funciones ya lo tengo aunque hay muchos diferentes, ni la tabla es la misma en todos. El caso es que debo ser mu torpe porque mi problema es que no lo entiendo, veo los comentarios de la pagina oficial pero cada uno lo tiene hecho de una manera y asi me lio.
Yo lo que necesito es que me digan con este fichero que contiene estas funciones tienes que hacer xxxx para guardar una variable y xxxxx para leerla, porque con la multitud de información que hay por hay cada vez me lio más.

Además yo ya tengo algo que funciona con un usuario pero cuando hay más se pisan las sesiones unos a otros, ta claro que algo estoy haciendo mal.

Os pongo todo mi código haber si alguien me puede decir que hago mal

Tabla

CREATE TABLE `wip_ses_lis` (
`sesskey` varchar(32) NOT NULL default '',
`expiry` int(11) unsigned NOT NULL default '0',
`lastused` timestamp(14) NOT NULL,
`value` text NOT NULL,
PRIMARY KEY (`sesskey`)
) TYPE=MyISAM;


Fichero session_mysql.php

<?
$SESS_DBHOST = "localhost"; /* database server hostname */
$SESS_DBNAME = "wip"; /* database name */
$SESS_DBUSER = "root"; /* database user */
$SESS_DBPASS = ""; /* database password */

$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");

function sess_open($save_path, $session_name) {
global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH;

if (! $SESS_DBH = mysql_connect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) {
echo "<li>Can't connect to $SESS_DBHOST as $SESS_DBUSER";
echo "<li>MySQL Error: ", mysql_error();
die;
}

if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) {
echo "<li>Unable to select database $SESS_DBNAME";
die;
}

return true;
}

function sess_close() {
return true;
}

function sess_read($key) {
global $SESS_DBH, $SESS_LIFE;

$qry = "SELECT value FROM wip_ses_lis WHERE sesskey = '$key'";
$qid = mysql_query($qry, $SESS_DBH);

$ret = mysql_fetch_row($qid);
mysql_free_result($qid);

if (list($value) = $ret) {
$ret = $value;
} else {
$ret = '';
}

return $ret;
}

function sess_write($key, $val) {
global $SESS_DBH, $SESS_LIFE;

$expiry = time() + $SESS_LIFE;

$value = addslashes($val);

$qry = "REPLACE INTO wip_ses_lis (sesskey, expiry, value) VALUES ('$key', $expiry, '$value')";
$success = mysql_query($qry, $SESS_DBH);

return $success;
}

function sess_destroy($key) {
global $SESS_DBH;

$qry = "DELETE FROM wip_ses_lis WHERE sesskey = '$key'";
$success = mysql_query($qry, $SESS_DBH);
return $success;
}

function sess_gc($maxlifetime) {
global $SESS_DBH;

# disabling session expiration
return 0;
}

session_set_save_handler(
"sess_open",
"sess_close",
"sess_read",
"sess_write",
"sess_destroy",
"sess_gc");

?>

Código por ejemplo de index.php para establecer idioma en el que se mueve el usuario

<?
include("includes/session_mysql.php");
session_start();
if(sess_read('auten_idioma')!='SI'){
session_start();
sess_write('idioma',1);
}
$idi=sess_read('idioma');
include ("idioma/".$idi.".php");
?>

PROBLEMA

En la base de datos me guarda

INSERT INTO `wip_ses_lis` VALUES ('idioma', 1265962609, 20100212085249, '1');
INSERT INTO `wip_ses_lis` VALUES ('43a35a26ded52380e94767aaaa215f49', 1265962609, 20100212085249, '');

Yo cambio de idioma sin problema, pero si entra otro usuario y cambia de idioma, se cambia el valor de idioma y me cambia el idioma a mi tambien. Por eso pienso que estoy haciendo mal lo de guardar las variables y leerlas. Necesito que me digan como hacerlo, estoy ya muy perdida.

Gracias