Según la filosofía de las sesiones, que pertenecen al usuario que las crea (mejor dicho al "cliente" que las crea) ..
No es necesario que en una variable de sesión propagues un dato como la "contraseña". Tampoco es -nada- recomendable pasar en una variable de sesión los datos que por "GET" te mandan .. las variables de sesión con sus valores adecuados debes "registrarlos" ($_SESSION['variable'] = "valor") en el momento que pase tu proceso de validación (en tu caso tu validación contra tu BBDD donde autentificas que los datos: usuario/contraseña son correctos para el usuario dado).
Por lo mismo .. tener una variable de sesión que almacene un dato como:
$_SESSION['usuario']
Y luego andar gestionando otra variable que indique si está autentificado o no:
$_SESSION['control']
No tiene sentido .. me explico, .. usa la variable que ya defines (y que debes definir si pasa tu proceso de autentificación contra tu BBDD en esa consulta SQL que haces) con el nombre del usuario en ese caso y usala simplemente: si existe, .. pasó tu autentificación .. si no existe .. no la pasó (o está accediendo directo a tus scripts sin pasar por tu validación ..) así de simple, una variable menos por el camino (a mi juicio sin valor .. ).
Todo esto lo comento aplicando la filosofía base de que consiste una sesión.
En resumen .. es tan simple como:
Tu script con el formulario de
login.php de este mandas su "action" a tu autentifica.php que es donde vamos a validar a tu usuario:
autentifica.php Código PHP:
<?php
session_start();
// tu consulta a tu BBDD
// Uso los datos de $_GET directos ..
// Uso mysql_real_escape_string() para evitar algo el fenómeno de "SQL Injection". (más info en google.com)
$setencia_sql="SELECT * FROM login WHERE login.usuario='".mysql_real_escape_string($_GET['login_usuario'])."' AND login.contrasena='".mysql_real_escape_string($_GET['login_usuario'])."'";
// Ejecuto la sentencia SQl .. la llamo "$resultado" .. realmente es lo que es.
$resultado= mysql_query($setencia_sql) or die (mysql_error());
// Cuento el n° de resultados .. espero 1 o 0 .. pues no tengo más usuarios repetidos en mi BBDD (por lo menos con un mismo usuario/contraseña como par)
if (mysql_num_rows($resultado) == 1){
// Si hay resultados .. entonces accedo a ellos ..
// Aunque esto te parezca redundante asi "normalizas" .. pues no tomas directo lo que por $_GET te entre sino lo que realmente en tus BBDD registras.
$datos=mysql_fetch_array($resultado);
// Y vamos creando las variables de sesión ...
$_SESSION['usuario']=$datos['usuario'];
// si necesitas más datos del usuario .. (como el "ID" por ejemplo .. que es muy útil para ir relacionandolo en otros procesos que hagas) .. usa la misma técnica para definir más variables de sesión.
// y redireccionas hacia tu script subsiguiente
header ("Location: pagina_autentificada.php");
// y terminamos la ejecución de este script .. aquí no hay nada más que hacer!.
exit;
// Así te aseguras que tus variables de sesión queden registradas, pues las variables de sesión no quedan registradas hasta la próxima iteracción con el servidor.
} else {
// tus rutinas de control del error en el "login" .. usuairo/contraseña no existen
// Lo normal es redireccionar hacia tu script de "login.php":
header ("Location: login.php");
exit;
}
pagina_autentificada.php Código PHP:
<?php
session_start();
if (empty($_SESSION['usuario'])){
header ("Location: login.php");
exit;
}
// resto de tu script.
// ejemplo:
echo "Hola, ".$_SESSION['usuario'];
?>
Perfectamente puedes contener este pequeño código de validación de tu variable de sesión en un script aparte que llames en todos tus scripts que requieran autentificación bajo un "include("validar.php")" o algo así.
Ahora ... si este procedimiento no te "funciona" en el aspecto de que sigues sin ver el valor de tus variables de sesión .. ahí hay que revisar como PHP (tu configuración) propaga el SID. (con los "header()" de tipo "location" que hago "asumo" que se propaga el SID en cookies y que tu navegador las acepta).
Un saludo,