Foros del Web » Programando para Internet » PHP »

problema con SESSION

Estas en el tema de problema con SESSION en el foro de PHP en Foros del Web. Buenas otra vez, todavía no he dado con la solución al siguiente problema. Tengo una página en la que valido si un usuario es apto ...
  #1 (permalink)  
Antiguo 16/02/2005, 07:10
 
Fecha de Ingreso: noviembre-2002
Mensajes: 34
Antigüedad: 15 años, 1 mes
Puntos: 0
problema con SESSION

Buenas otra vez, todavía no he dado con la solución al siguiente problema.
Tengo una página en la que valido si un usuario es apto para ver unas páginas.
El código q utilizo es muy facil
<?php
session_start();
//Conexion con la base
mysql_connect("localhost","root","");

//Ejecucion de la sentencia SQL
$result=mysql_db_query("observatorio","select * from usuarios where usuario='$HTTP_POST_VARS[usuario]' and contrasenya='$HTTP_POST_VARS[contra]'");

//miramos a ver si tenemos algun dato
$num=mysql_num_rows($result);
mysql_free_result($result);


if ($num>0)
{

// Si es uno de nuestros usuarios lo dejo pasar al indice.
$_SESSION['Valida']="1";
session_write_close();
header("location:index02.php");
}
else
{
//si no lo devuelvo a la página donde tiene q volver a poner el usuario y la contraseña.
$_SESSION['Valida']="0";
session_write_close();
header("location:login.php");
}
?>

Hasta aqui todo bien pero en index02.php, compruebo si puede entrar y entonces es donde me da el error.

<? session_start();
IF ($_SESSION['Valida']!="1")
{
session_write_close();
header("location:login.php");
exit();
}
?>


Error:

Notice: Undefined index: Valida in C:\Inetpub\wwwroot\observatorio\admin\index02.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at C:\Inetpub\wwwroot\observatorio\admin\index02.php: 2) in C:\Inetpub\wwwroot\observatorio\admin\index02.php on line 5

Gracias
  #2 (permalink)  
Antiguo 16/02/2005, 07:20
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
a ver, no estoy bien seguro de lo que te diré pero no pierdes nada con probar

tu tienes esto

Código PHP:
<? session_start(); 
IF (
$_SESSION['Valida']!="1")

session_write_close();
header("location:login.php");
exit();
}
?>
cambialo por esto

Código PHP:
<? session_start(); 
IF (
$_SESSION['Valida']!="1")

header("location:login.php");
exit();
session_write_close();
}
?>
  #3 (permalink)  
Antiguo 16/02/2005, 07:24
 
Fecha de Ingreso: noviembre-2002
Mensajes: 34
Antigüedad: 15 años, 1 mes
Puntos: 0
eso creo q no tiene mucho sentido porque en el momento que haces exit() ya te sales.
Además el error me lo da antes me dice q 'Valida' no es un indice es como si al pasar de página através del header perdiese las variables de Session o algo así, pero gracias de todos modos.
  #4 (permalink)  
Antiguo 16/02/2005, 08:43
 
Fecha de Ingreso: noviembre-2002
Mensajes: 34
Antigüedad: 15 años, 1 mes
Puntos: 0
nadie puede ayudarme??, debe ser una tonteria pero no encuentro la solución, si teneis cualquier otra forma para validar usuarios comprobando si se encuentran en una base de datos tambien m serviria.

Gracias.
  #5 (permalink)  
Antiguo 16/02/2005, 09:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El error dice que en la línea 2 de tu:
C:\Inetpub\wwwroot\observatorio\admin\index02.php

Tienes un salto de línea, o un simple espacio antes de <? o si tienes algún include() por ahí que llames a otro .php .. al final del mismo ?>. Puede ser también un echo "algo" .. o algo de HTML que está ocasionando una salida el navegador .. Asegurate que no tengas nada de "salida" ahí en esa línea.

Un saludo,
  #6 (permalink)  
Antiguo 16/02/2005, 09:11
 
Fecha de Ingreso: noviembre-2002
Mensajes: 34
Antigüedad: 15 años, 1 mes
Puntos: 0
ya, porque en la linea uno esta
<? session_start();
y en la segunda miro a ver lo que tengo en mi variable de session Valida
IF ($_SESSION['Valida']!="1")
y aqui es donde me da el error me dice q no existe ningun indice llamado Valida.

Me estoy volviendo loca con esto y el caso es q la solución no creo q sea dificil, pero me he quedado atascada
  #7 (permalink)  
Antiguo 16/02/2005, 09:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Usa isset() para ver su existencia .. despues si lo deseas revisas su valor .. aunque para lo que usas no necesitas ni del valor .. sólo de su existencia.

Código PHP:
if (isset($_SESSION['Valida']){
// etc ..

Un saludo,
  #8 (permalink)  
Antiguo 16/02/2005, 10:38
 
Fecha de Ingreso: noviembre-2002
Mensajes: 34
Antigüedad: 15 años, 1 mes
Puntos: 0
no funciona, no se q esta pasando, el kso es q yo hice lo mismo pero para un servidor linux con php y mysql y no tuve ningun problema y este servidor es distinto es windows, php y mysql y no se q pasa q no hay forma. Como tengo prisa lo haré en asp.
Gracias
  #9 (permalink)  
Antiguo 16/02/2005, 11:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok, entonces resuelve el problema como puedas .. Pero insisto que si usas PHP y "sesiones" deberías leer sobre ellas.

session_write_close() no es necesario que lo uses .. Lo que si que tienes que tener claro es como propagas el SID en tu aplicación (Identificador único de sesiones) .. Tu por tu forma de programar asumes que lo vas hacer por cookies lo cual requiere de la configuración (php.ini) session.use_cookies = ON y de un navegador que acepte cookies.

Si el SID no se propaga .. no podrás acceder a tus variables de sesión definidas en X.script en Y.script

Por lo demás podrías usar mi script "Autentificator" .. hace lo que estas intentado hacer, por lo menos pruebalo y revisa su código es bien parecido a lo que estás haciendo:

http://php.cluster-web.com/autentificator

Un saludo,
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:50.