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 |