Foros del Web » Programando para Internet » PHP »

Pierto variables de SESIÓN

Estas en el tema de Pierto variables de SESIÓN en el foro de PHP en Foros del Web. Buenas a todos. Mi problema es que pierdo las variables de SESION cuando cambio de página, o lo que es lo mismo. index.php -> aqui ...
  #1 (permalink)  
Antiguo 14/10/2010, 02:17
Avatar de EricDraven36  
Fecha de Ingreso: septiembre-2010
Mensajes: 17
Antigüedad: 13 años, 7 meses
Puntos: 0
Pierto variables de SESIÓN

Buenas a todos.

Mi problema es que pierdo las variables de SESION cuando cambio de página, o lo que es lo mismo.

index.php -> aqui tengo el formulario cuya acción llama a usuarios.php que comprueba el us/pwd e inicia la sesión.

usuario.php -> comprueba el us/pwd e inicia la sesión, creo 2 variables de control y con header, vuelve a llamar a index.php .

index.php -> el código del formulario está metido en un "if" que compara si la variable de control tiene o no algo para mostrar el formulario o el típico mensaje de bienvenida.

Pues bien, cuando vuelvo a index.php después de haber iniciado la sesión, no me reconoce las variables de sesion.

¿alguna idea?

Código:
index.php
<?php
$id=session_id();;
if (empty($id)==false ){
session_name ($id);
session_call();
}
echo "<DIV id= id style='visibility:visible;overflow:hidden;position :absolute;z-index:87;left:674px;top:50px;'>";
if (strcmp($_SESSION['aut'],1) == 0){
$nom=$_SESSION['nombre'];
echo "<font face='Verdana' size='3'>Bienvenido Sr. $nom </font>";
}else{
echo "<font face='Verdana' size='2'>";
echo "<FORM NAME ='form1' METHOD ='post' ACTION = 'usuarios.php'>";
echo "<INPUT TYPE = 'TEXT' VALUE ='' STYLE='font-family: Verdana; font-size: 12px;' NAME= 'username' >";
echo "<INPUT TYPE = 'password' VALUE ='' STYLE='font-family: Verdana; font-size: 12px;' NAME = 'pwd'>";
echo "<INPUT TYPE = 'Submit' Name = 'Submit1' STYLE='font-family: Verdana; font-size: 12px;' VALUE = 'Iniciar Sesion'>";
echo "</FORM>";
echo "</font>";
}
echo "</DIV>";
?>

usuarios.php
<?php
$username = $_POST['username'];
$pwd = $_POST['pwd'];
$conexion = mysql_connect("localhost", "web", "1234");
mysql_select_db("pueblo", $conexion);
$result = mysql_query("SELECT * FROM usuarios where usu='" . $username ."' and pwd='" . $pwd . "'");
while($row = mysql_fetch_array($result)){
session_register($row['id_usu']);
session_name ($row['id_usu']);
session_start();
$_SESSION['aut']= 1;
$_SESSION['nombre']= $row['apel1'];
header('Location: index.php?id=' . $row['id_usu']);
}
mysql_close($conexion);
?>
  #2 (permalink)  
Antiguo 14/10/2010, 02:19
Avatar de EricDraven36  
Fecha de Ingreso: septiembre-2010
Mensajes: 17
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Pierto variables de SESIÓN

lo de:

$id=session_id();;
if (empty($id)==false ){
session_name ($id);
session_call();
}

es una "paja" mental a la desesperada, lógicamente, no sirve de nada
  #3 (permalink)  
Antiguo 14/10/2010, 02:19
 
Fecha de Ingreso: septiembre-2009
Mensajes: 210
Antigüedad: 14 años, 7 meses
Puntos: 19
Respuesta: Pierto variables de SESIÓN

Al principio de cada página debes poner
session_start();

Antes que ninguna otra cosa, obvio dentro de php.

En tu caso

Código:
index.php
<?php
session_start();
$id=session_id();;
if (empty($id)==false ){
session_name ($id);
session_call();
}
echo "<DIV id= id style='visibility:visible;overflow:hidden;position :absolute;z-index:87;left:674px;top:50px;'>";
if (strcmp($_SESSION['aut'],1) == 0){
$nom=$_SESSION['nombre'];
echo "<font face='Verdana' size='3'>Bienvenido Sr. $nom </font>";
}else{
echo "<font face='Verdana' size='2'>";
echo "<FORM NAME ='form1' METHOD ='post' ACTION = 'usuarios.php'>";
echo "<INPUT TYPE = 'TEXT' VALUE ='' STYLE='font-family: Verdana; font-size: 12px;' NAME= 'username' >";
echo "<INPUT TYPE = 'password' VALUE ='' STYLE='font-family: Verdana; font-size: 12px;' NAME = 'pwd'>";
echo "<INPUT TYPE = 'Submit' Name = 'Submit1' STYLE='font-family: Verdana; font-size: 12px;' VALUE = 'Iniciar Sesion'>";
echo "</FORM>";
echo "</font>";
}
echo "</DIV>";
?>

usuarios.php
<?php
session_start();
$username = $_POST['username'];
$pwd = $_POST['pwd'];
$conexion = mysql_connect("localhost", "web", "1234");
mysql_select_db("pueblo", $conexion);
$result = mysql_query("SELECT * FROM usuarios where usu='" . $username ."' and pwd='" . $pwd . "'");
while($row = mysql_fetch_array($result)){
session_register($row['id_usu']);
session_name ($row['id_usu']);
session_start();
$_SESSION['aut']= 1;
$_SESSION['nombre']= $row['apel1'];
header('Location: index.php?id=' . $row['id_usu']);
}
mysql_close($conexion);
?>
  #4 (permalink)  
Antiguo 14/10/2010, 02:55
Avatar de EricDraven36  
Fecha de Ingreso: septiembre-2010
Mensajes: 17
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Pierto variables de SESIÓN

Me sale este error en el index.php cuando vuelve:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\x\xampplite\htdocs\pueblo\Web\index.php:19) in C:\x\xampplite\htdocs\pueblo\Web\index.php on line 20

alguna idea?
  #5 (permalink)  
Antiguo 14/10/2010, 03:27
Avatar de EricDraven36  
Fecha de Ingreso: septiembre-2010
Mensajes: 17
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Pierto variables de SESIÓN

Ya está, simplemente tengo que poner :
error_reporting (5); antes del session_start(); del index.php y LISTO !!!!
aunque tengo que poner eso siempre?
  #6 (permalink)  
Antiguo 14/10/2010, 04:17
 
Fecha de Ingreso: septiembre-2009
Mensajes: 210
Antigüedad: 14 años, 7 meses
Puntos: 19
Respuesta: Pierto variables de SESIÓN

No deberías de ponerlo.
Simplemente, creo que pusiste algo antes del session_start();

Si pones algo, aunque sea un mero espacio...ya no funcionará.
  #7 (permalink)  
Antiguo 19/10/2010, 02:06
Avatar de EricDraven36  
Fecha de Ingreso: septiembre-2010
Mensajes: 17
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Pierto variables de SESIÓN

Acabo de volver a probar el código y no me guarda las variables de sesión de página en página.
el código es:

index.php
<?php
session_start();
$id=$_GET["id"];
if (isset($id)==true){
echo "<DIV id= id style='visibility:visible;overflow:hidden;position :absolute;z-index:87;left:104px;top:65px;'>";
$nom=$_SESSION['nombre'];
echo "<font face='Verdana' size='2'>Bienvenido Sr. $nom </font>";
echo "</DIV>";
}else{
echo "<DIV id= id style='visibility:visible;overflow:hidden;position :absolute;z-index:87;left:104px;top:2px;'>";
echo "<font face='Verdana' size='2'>";
echo "<FORM NAME ='form1' METHOD ='post' ACTION = 'usuarios.php'>";
echo "<font face='Verdana' size='2'>Usuario : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><INPUT TYPE = 'TEXT' VALUE ='' STYLE='font-family: Verdana; font-size: 12px;' NAME= 'username' ><br><br>";
echo "<font face='Verdana' size='2'>Contrase&ntilde;a :&nbsp;</font><INPUT TYPE = 'password' VALUE ='' STYLE='font-family: Verdana; font-size: 12px;' NAME = 'pwd'><br>";
echo "<INPUT TYPE = 'Submit' Name = 'Submit1' STYLE='font-family: Verdana; font-size: 12px;' VALUE = 'Iniciar Sesion'>";
echo "</FORM>";
echo "</font>";
echo "</DIV>";
}

?>

usuarios.php
<?php
$username = $_POST['username'];
$pwd = $_POST['pwd'];
$conexion = mysql_connect("localhost", "web", "1234");
mysql_select_db("pueblo", $conexion);
$result = mysql_query("SELECT * FROM usuarios where usu='" . $username ."' and pwd='" . $pwd . "'");
while($row = mysql_fetch_array($result)){
session_register($row['id_usu']);
session_name ($row['id_usu']);
session_start();
$_SESSION['aut']= 1;
$_SESSION['nombre']= $row['apel1'];
header('Location: index.php?id=' . $row['id_usu']);
}
mysql_close($conexion);
?>

Y el Warning que me sale es:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\x\xampplite\htdocs\pueblo\Web\index.php:19) in C:\x\xampplite\htdocs\pueblo\Web\index.php on line 20
  #8 (permalink)  
Antiguo 19/10/2010, 02:20
 
Fecha de Ingreso: septiembre-2009
Mensajes: 210
Antigüedad: 14 años, 7 meses
Puntos: 19
Respuesta: Pierto variables de SESIÓN

Ponlo así:

usuarios.php
<?php
session_start();
$username = $_POST['username'];
$pwd = $_POST['pwd'];
$conexion = mysql_connect("localhost", "web", "1234");
mysql_select_db("pueblo", $conexion);
$result = mysql_query("SELECT * FROM usuarios where usu='" . $username ."' and pwd='" . $pwd . "'");
while($row = mysql_fetch_array($result)){
session_register($row['id_usu']);
session_name ($row['id_usu']);
$_SESSION['aut']= 1;
$_SESSION['nombre']= $row['apel1'];
header('Location: index.php?id=' . $row['id_usu']);
}
mysql_close($conexion);
?>
  #9 (permalink)  
Antiguo 19/10/2010, 02:30
Avatar de EricDraven36  
Fecha de Ingreso: septiembre-2010
Mensajes: 17
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Pierto variables de SESIÓN

Me sigue sin recuperar la variable 'nombre' cuando vuelvo al index.php.
Además me sigue saliendo el WARNING ese
  #10 (permalink)  
Antiguo 19/10/2010, 02:40
Avatar de EricDraven36  
Fecha de Ingreso: septiembre-2010
Mensajes: 17
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Pierto variables de SESIÓN

¿tengo que tocar algo en el PHP.INI?
  #11 (permalink)  
Antiguo 19/10/2010, 04:08
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 meses
Puntos: 44
Respuesta: Pierto variables de SESIÓN

No tienes que tocar nada. Borra o cambia de sitio todo lo que tienes antes del session_start(), incluso HTML.
  #12 (permalink)  
Antiguo 19/10/2010, 04:18
Avatar de EricDraven36  
Fecha de Ingreso: septiembre-2010
Mensajes: 17
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Pierto variables de SESIÓN

Me sigue saliendo lo mismo, no creo que sea un problema de orden de colocación.

Etiquetas: pierdo, sesión, variables
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 22:00.