vengo a exponer una cuestión de la que me he percatado y que no sé si es acertada mi conclusión.
perfeccionando mi proyecto personal web, me he dado cuenta de que cuando un usuario se registra inicia una variable de sesión después de hacer una comprobación en base de datos mysql (en este caso).
el usuario al hacer unlogin la variable de sesion la estruía de la siguiente manera:
no le dí mucha más importacia, hasta que tuve que utilizar de nuevo las variables de sesión, esta vez para un carrito de compra, el cual utilizará variables de sesión.
si utilizo session_unset(); esto podría provocar un error que no quiero, es el siguiente:
un usuario se registra, marca ciertos productos para comprarlos, pero antes de comprarlos cierra sesión usuario, al hacer clic se le borran todos los $_SESSION por que yo programé session_unset(); y lo que quiero es darle al usuario la posibilidad de que si se desloguea solo borre su sesion de usuario, no su sesion del carrito de compra.
busqué una alternativa a session_unset();
en la documentación de php me recomienda que si utilizo $_SESSION es mejor borrar sesiones específicas, efectivamente era lo que yo buscaba.
el problema viene dado cuando borro S_SESSION desde una función; al hacerlo me decía que la variable $_SESSION["usuario"]; no existía.
seguí buscando información de por qué este error y me encontré con que hay dos tipos de variables:
las que trabajan fuera de funciones son por defecto globales.
las que trabajan dentro de funciones son por defecto locales.
deducí que ese era el error, que al borrar $_SESSION("usuario"); dentro de una función estaba borrando un $_SESSION local y no el global.
por lo tanto a la hora de borrar $_SESSION["usuario"]; le indiqué que borrar la variable global "usuario".
a raíz de esto tengo dos preguntas:
¿es acertado borrar la variable $_SESSION["usuario"] con unset($GLOBAL("usuario"))?
¿si la variable $_SESSION["usuario"] la creé a partir de un valor obtenido por consulta a mysql dentro de una función cómo es que pasa a ser global y no local?
les dejo mi código para que tengan el resultado que al parecer me funciona.
funciones.php (donde se crea y destruye la variable de sesion $_SESSION["usuario"])
Código PHP:
Ver originalfunction sesion_usuario()
{
if (isset ($_POST["salir"]))//primero cierra sesion si el usuario ha pulsado en salir, sino hace lo que hay a continuaci�n {
//ahora borro así la variable de sesión "usuario" y parece que funciona porque en el blog_index.php da el error de Undefined variable: _SESSION
unset($GLOBALS["usuario"]); /*session_unset(); //antes borraba así la variable de sesión "usuario"*/
}
if(isset($_SESSION['usuario'])) //si hay sesion iniciada {
menu_unlogin();
}
elseif (isset($_POST['enviarlogin'])) //si el usuario envía los datos de registro {
//creación de la instacia a la clase para consultar datos
$usuario=new Sesion_usuario();
$usuario=$usuario->sesion($_POST['usuario'], $_POST['passwd']);
{
for($i=0;$i<sizeof($usuario);$i++) {
if($_POST['usuario']==$usuario[$i]['usuario'] AND $_POST['passwd']==$usuario[$i]['passwd'])
{
//aquí se crea la sesión de usuario para abrir su sesión
$_SESSION["usuario"]=$usuario[$i]['usuario'];
menu_unlogin();
}
else
{
echo "usuario no válido";
}
}
}
else
{
echo "usuario no válido";
}
}
else //sino carga siempre menu para login
{
menu_login();
}
}
blog_index.php
Código PHP:
Ver original<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 5 Transitional//EN">
<HTML>
<HEAD>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta http-equiv="Content-Language" content="es"/>
<link href="style.css" type="text/css" rel="stylesheet"/>
<title>Espacio de Jonathan Rodríguez</title>
<?php include ('funciones.php'); ?>
</HEAD>
<BODY>
<div id="body">
<div id="caja">
<div id="cabecera">
<?php cabecera(); ?>
<?php echo " ··· ".$_SESSION['usuario']. " ··· ";
/*aquí compruebo en todo momento el valor de la variable de sesion "usuario"*/ ?>
</div>
<div id="cuerpo">
<?php cuerpo(); ?>
</div>
<div id="pie">
<?php pie(); ?>
</div>
</div>
</div>
</BODY>
</HTML>