Foros del Web » Programando para Internet » PHP »

La $_SESSION no me va.

Estas en el tema de La $_SESSION no me va. en el foro de PHP en Foros del Web. El caso esque tengo un sistema de logeo que va como toca, menos por un detalle; cuando pasamos con éxito el logeo tendria que mostrar ...
  #1 (permalink)  
Antiguo 27/10/2008, 10:17
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
La $_SESSION no me va.

El caso esque tengo un sistema de logeo que va como toca, menos por un detalle;
cuando pasamos con éxito el logeo tendria que mostrar en la página siguiente arriba a la izquierda el nombre del usuario logeado, y en vez de eso me muestra "desconocido". He dado miles de millones de vueltas a la cosa durante dias sin ningún resultado. Pongo los códigos a ver si alguien me puede hechar un cable.

Este es el archivo donde rellenamos los campos de las variables para luego ser enviadas al archivo control.php. Además recoge en la $_SESSION (por lo menos deberia no?) la variable escrita en el campo '$usuario'

index.php
Código PHP:
<?php 
// Inicializamos sesion 
session_start(); 
// Guardamos una variable 
$_SESSION['usuario'] = $usuario
?>
<html>
<head>
    <title>Autentificación PHP</title>
    <style type="text/css">
<!--
.Estilo1 {
    color: #CCCCCC;
    font-style: italic;
    font-size: 12px;
}
.Estilo2 {
    color: #FFFFFF;
    font-weight: bold;
    font-size: 12px;
}
.Estilo3 {
    color: #3399FF;
    font-weight: bold;
}
a:link {
    text-decoration: none;
}
a:visited {
    text-decoration: none;
}
a:hover {
    text-decoration: none;
}
a:active {
    text-decoration: none;
}
.Estilo5 {color: #666666; font-style: italic; font-size: 12px; }
.Estilo7 {color: #000000; font-weight: bold; font-size: 12px; }
-->
    </style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<body>
<h1>Autentificación PHP</h1>
<form action="control.php" method="POST">
<table align="left" width="225" cellspacing="2" cellpadding="2" border="0">
<tr>
    <td colspan="2" align="center" 
    <?if ($_GET["errorusuario"]=="si"){?>
        bgcolor=red><p><span style="color:ffffff"><b>Datos incorrectos</b></span></p>
      <p><span class="Estilo1">si no estas registrado ve a</span> <span class="Estilo2">registrarse</span> 
        <?}else{?>
      bgcolor=#cccccc>Introduce tu clave de acceso</p>
      <p><span class="Estilo5">si no estas registrado ve a</span> <span class="Estilo7">registrarse</span> </p>      <?}?></td>
</tr>
<tr>
    <td align="right">Nick:</td>
    <td><input type="Text" name="usuario" size="8" maxlength="50"></td>
</tr>
<tr>
    <td align="right">Password:</td>
    <td><input type="password" name="contrasena" size="8" maxlength="50"></td>
</tr>
<tr>
    <td colspan="2" align="center"><input type="Submit" value="ENTRAR"></td>
</tr>
<tr>
  <td colspan="2" align="center"><span class="Estilo3"><a href="registro.php">Registrarse</a></span></td>
</tr>
</table>
</form>
</body>
</html>
El archivo control.php comprueba las variables en la base de datos para ver si hay coincidencias.

control.php
Código PHP:
<?  
//conecto con la base de datos  
$conn mysql_connect("localhost","usuario","contraseñarrebuscada");  
//selecciono la BBDD  
mysql_select_db("mibasededatos",$conn);  
 
//Sentencia SQL para buscar un usuario con esos datos  
$ssql "SELECT * FROM mitabla WHERE nombre_usuario='$usuario' and clave_usuario='$contrasena'";  
 
//Ejecuto la sentencia  
$rs mysql_query($ssql,$conn);  
 
//vemos si el usuario y contraseña es váildo  
//si la ejecución de la sentencia SQL nos da algún resultado  
//es que si que existe esa conbinación usuario/contraseña  
if (mysql_num_rows($rs)!=0){  
    
//usuario y contraseña válidos  
    //defino una sesion y guardo datos  
    
session_start();  
    
session_register("autentificado");  
    
$autentificado "SI";  
    
header ("Location: aplicacion.php");  
}else {  
    
//si no existe le mando otra vez a la portada  
    
header("Location: index.php?errorusuario=si");  
}  
mysql_free_result($rs);  
mysql_close($conn);  
?>
Y este archivo es donde vamos aparar si todo es correcto y donde tendria que poner el nombre del usuario que se acaba de logear y no 'desconocido' :
aplicacion.php
Código PHP:
<?include ("seguridad.php");?>
<?php 
// Inicializamos sesion 
session_start(); 
// Comprovamos si existe la variable
if ( isset ( $_SESSION['nombre'] ) ) {
 
// Si existe
 
echo $_SESSION['nombre'];
} else {
 
// Si no existe
 
echo 'desconocido';
}
?>
<html> 
<head>  
<title>Aplicación segura</title>  
</head>
<body>  
<h1>Si estás aquí es que te has autentificado</h1>  
<br>  
----  
<br>  
Aplicación segura  
<br>  
----  
<br>  
<br>  
<a href="salir.php">Salir</a>  
</body>  
</html>
Por favor, quien me puede localizar el fallo o decirme que código es el correcto? Estoy desesperado yaaaaa
  #2 (permalink)  
Antiguo 27/10/2008, 10:25
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: La $_SESSION no me va.

¿De donde sacas el valor de $usuario?

$_SESSION['usuario'] = $usuario;
  #3 (permalink)  
Antiguo 27/10/2008, 10:33
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Pregunta Respuesta: La $_SESSION no me va.

Es lo que escribimos en el campo Nick, la variable se llama $usuario. No tendria que cojer como variable lo que escribamos?
  #4 (permalink)  
Antiguo 27/10/2008, 10:45
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: La $_SESSION no me va.

Hola

pero primero deberias de recoger la variable con POST antes de guardarla en la session

$usuario = $_POST['usuario'];

$_SESSION['usuario'] = $usuario;

Un saludo
  #5 (permalink)  
Antiguo 27/10/2008, 14:19
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: La $_SESSION no me va.

Cita:
Iniciado por jaronu Ver Mensaje
Hola

pero primero deberias de recoger la variable con POST antes de guardarla en la session

$usuario = $_POST['usuario'];

$_SESSION['usuario'] = $usuario;

Un saludo
He cambiado el código del index.php como dices tal que así:

Código PHP:
<?php  
// Inicializamos sesion  
session_start();  
// Guardamos una variable  
$usuario $_POST['usuario'];
$_SESSION['usuario'] = $usuario;  
?>
y sigue sin ir. Ahora donde está el problema. Se supone que lo recoge el archivo aplicación.php con este código no?:

Código PHP:
<?php  
// Inicializamos sesion  
session_start();  
// Comprovamos si existe la variable 
if ( isset ( $_SESSION['nombre'] ) ) { 
 
// Si existe 
 
echo $_SESSION['nombre']; 
} else { 
 
// Si no existe 
 
echo 'desconocido'

?>
Un gallifante para quien lo acierte
  #6 (permalink)  
Antiguo 27/10/2008, 14:27
 
Fecha de Ingreso: enero-2008
Mensajes: 163
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: La $_SESSION no me va.

bueno a lo que veo io si tienes que utilizar el POST pero no en esa pagina ya que lo datos los mandas control.php entoncs donde debes de poner $_SESSION['usuario'] = $_POST['usuario'] es en la pagina de control de otra manera con tu codigo no podras ver el nombre del usuario
  #7 (permalink)  
Antiguo 27/10/2008, 14:48
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: La $_SESSION no me va.

Lo pruebo y te digo...
  #8 (permalink)  
Antiguo 27/10/2008, 14:53
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: La $_SESSION no me va.

Nada, sigue apareciendo desconocido. He cambiado el código del control.php así:

Código PHP:
<?  
//conecto con la base de datos  
$conn mysql_connect("localhost","aerotech","CullA3ro*32T");  
//selecciono la BBDD  
mysql_select_db("aerotechdb",$conn);
// Inicializamos sesion  
session_start();  
// Guardamos una variable  
$usuario $_POST['usuario'];
$_SESSION['usuario'] = $usuario
//Sentencia SQL para buscar un usuario con esos datos  
$ssql "SELECT * FROM mi_db WHERE nombre_usuario='$usuario' and clave_usuario='$contrasena'";  
 
//Ejecuto la sentencia  
$rs mysql_query($ssql,$conn);  
 
//vemos si el usuario y contraseña es váildo  
//si la ejecución de la sentencia SQL nos da algún resultado  
//es que si que existe esa conbinación usuario/contraseña  
if (mysql_num_rows($rs)!=0){  
    
//usuario y contraseña válidos  
    //defino una sesion y guardo datos  
    
session_start();  
    
session_register("autentificado");  
    
$autentificado "SI";  
    
header ("Location: aplicacion.php");  
}else {  
    
//si no existe le mando otra vez a la portada  
    
header("Location: index.php?errorusuario=si");  
}  
mysql_free_result($rs);  
mysql_close($conn);  
?>
Alguien sabe arreglar esto?
  #9 (permalink)  
Antiguo 27/10/2008, 14:55
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: La $_SESSION no me va.

en ese otro archivo llamas a la variable de sesion con otro nombre

<?php
// Inicializamos sesion
session_start();
// Comprovamos si existe la variable
if ( isset ( $_SESSION['nombre'] ) ) { // cambiarlo por $_SESSION['usuario']
// Si existe
echo $_SESSION['nombre'];
} else {
// Si no existe
echo 'desconocido';
}
?>

usas sesion nombre y deberia se usuario

$_SESSION['usuario'] = $usuario;

cada vez que llames a la session lo haces con $_SESSION['usuario'] en todos los qrchivos

Un saludo
  #10 (permalink)  
Antiguo 27/10/2008, 14:56
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: La $_SESSION no me va.

session_start ponelo siempre en la primera linea si queres agregarle un comentario ponelo abajo a mi me ha pasa que no me a reconocido las sesiones por dejar un espacion al abrir el script
Código PHP:
<?php
session_start
()
//fijate que no quede un espacio en <?php y que session_start este abajo
  #11 (permalink)  
Antiguo 27/10/2008, 15:00
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: La $_SESSION no me va.

pero el fallo no es por dejar un espacio antes de session_start();

si no en dejar el espacio antes de la etiqueta

<?php de inicio del codigo
  #12 (permalink)  
Antiguo 27/10/2008, 15:03
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: La $_SESSION no me va.

si si me exprese mal
Código PHP:
<?php // bien
Código PHP:
    <?php //mal
igual lo de session_start si no esta en la primera linea a veces no te lo reconoce, me paso esta mañana tenia session_start(); debajo de un comentario y me tiraba un error
  #13 (permalink)  
Antiguo 27/10/2008, 15:04
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: La $_SESSION no me va.

Voy a ver si va y os digo más cosas...
  #14 (permalink)  
Antiguo 27/10/2008, 15:05
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: La $_SESSION no me va.

Cita:
Iniciado por samu22 Ver Mensaje
si si me exprese mal
Código PHP:
<?php // bien
Código PHP:
    <?php //mal
igual lo de session_start si no esta en la primera linea a veces no te lo reconoce, me paso esta mañana tenia session_start(); debajo de un comentario y me tiraba un error
sisi, eso esta claro samu, thnx
  #15 (permalink)  
Antiguo 27/10/2008, 15:12
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: La $_SESSION no me va.

Nada, seguimos igual. Pongo otra vez los códigos.

control.php
Código PHP:
<?php
session_start
();    
$usuario $_POST['usuario'];
$_SESSION['usuario'] = $usuario
//conecto con la base de datos  
$conn mysql_connect("localhost","usuario","clave");  
//selecciono la BBDD  
mysql_select_db("mibasededatos",$conn);

//Sentencia SQL para buscar un usuario con esos datos  
$ssql "SELECT * FROM mitabla WHERE nombre_usuario='$usuario' and clave_usuario='$contrasena'";  
 
//Ejecuto la sentencia  
$rs mysql_query($ssql,$conn);  
 
//vemos si el usuario y contraseña es váildo  
//si la ejecución de la sentencia SQL nos da algún resultado  
//es que si que existe esa conbinación usuario/contraseña  
if (mysql_num_rows($rs)!=0){  
    
//usuario y contraseña válidos  
    //defino una sesion y guardo datos  
    
session_start();  
    
session_register("autentificado");  
    
$autentificado "SI";  
    
header ("Location: aplicacion.php");  
}else {  
    
//si no existe le mando otra vez a la portada  
    
header("Location: index.php?errorusuario=si");  
}  
mysql_free_result($rs);  
mysql_close($conn);  
?>
seguiridad.php
Código PHP:
<?  
//Inicio la sesión  
session_start();  
 
//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if ($_SESSION["autentificado"] != "SI") {  
    
//si no existe, envio a la página de autentificacion  
    
header("Location: index.php");  
    
//ademas salgo de este script  
    
exit();  
}  
?>
aplicacion.php
Código PHP:
<?include ("seguridad.php");?> 
<?php 
// Inicializamos sesion 
session_start(); 
// Comprovamos si existe la variable 
if ( isset ( $_SESSION['nombre'] ) ) { // cambiarlo por $_SESSION['usuario'] 
// Si existe 
echo $_SESSION['nombre']; 
} else { 
// Si no existe 
echo 'desconocido'

?>
 
<html>  
<head>   
<title>Aplicación segura</title>   
</head> 
<body>   
<h1>Si estás aquí es que te has autentificado</h1>   
<br>   
----   
<br>   
Aplicación segura   
<br>   
----   
<br>   
<br>   
<a href="salir.php">Salir</a>   
</body>   
</html>
Empecemos de 0. Que falla amigos?

Última edición por Xematick; 27/10/2008 a las 15:45
  #16 (permalink)  
Antiguo 27/10/2008, 15:14
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: La $_SESSION no me va.

pero has provado ya a llamar a la veriable de sesion igual en todas las paginas?

la has de llamar como la almacenas

$_SESSION['usuario'] = $usuario; // es en esta linea donde defines por primera vez la variable de sesion en control.php

cada vez que llames a la session lo haces con $_SESSION['usuario'] en todos los qrchivos

y no $_SESSION['nombre'] que haces en el archivo aplicacion.php


esta seria otra variable de sesion.

Un saludo
  #17 (permalink)  
Antiguo 27/10/2008, 15:17
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: La $_SESSION no me va.

Perdon en el aplicacion.php va esto:

Código PHP:
<?include ("seguridad.php");?>  
<?php  
// Inicializamos sesion  
session_start();  
// Comprovamos si existe la variable  
if ( isset ( $_SESSION['usuario'] ) ) { // cambiarlo por $_SESSION['usuario']  
// Si existe  
echo $_SESSION['usuario'];  
} else {  
// Si no existe  
echo 'desconocido';  
}  
?>
...y nada, sigue sin..... ANDAAAAAAAAAA!!! SI VAAAAAA VIVAAAAAAAAAAAAAAAAAAAAAAAAA ERES EL MEJOR jaronu!!!!
  #18 (permalink)  
Antiguo 27/10/2008, 15:19
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: La $_SESSION no me va.

Bueno, y bleckfala y samu también han contribuido bastante. Muchas gracias de verdad, menudo dolor de cabeza me habeis quitado, voy a poder estudiar tranquilamente esta semana. Gracias gracias gracias
  #19 (permalink)  
Antiguo 27/10/2008, 15:22
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: La $_SESSION no me va.

esto:

Cita:
// Guardamos una variable
$_SESSION['usuario'] = $usuario;
No ha de ir en el index.php

ponlo en controlphp, despues de recibir la variable por post

PD, esdito leei el primer post ya esta asi, es raro que no te coja la session
  #20 (permalink)  
Antiguo 27/10/2008, 15:29
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: La $_SESSION no me va.

en control php usas una funcion obsoleta,

session_register("autentificado");

usa $_SESSION['autentificado']
  #21 (permalink)  
Antiguo 27/10/2008, 15:29
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: La $_SESSION no me va.

Cita:
Iniciado por jaronu Ver Mensaje
esto:



No ha de ir en el index.php

ponlo en controlphp, despues de recibir la variable por post

PD, esdito leei el primer post ya esta asi, es raro que no te coja la session
si si, ya lo habia quitado del index y pasado al control, mil gracias
  #22 (permalink)  
Antiguo 27/10/2008, 15:33
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: La $_SESSION no me va.

Cita:
Iniciado por jaronu Ver Mensaje
en control php usas una funcion obsoleta,

session_register("autentificado");

usa $_SESSION['autentificado']
a demas de abrir dos veces la session
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:12.