Foros del Web » Programando para Internet » PHP »

variables de sesión

Estas en el tema de variables de sesión en el foro de PHP en Foros del Web. Hola, Estoy intentando hacer mi promer script usando variables de sesión y no me funciona. Tengo tres páginas, una es un formulario para logearse, la ...
  #1 (permalink)  
Antiguo 24/08/2009, 07:56
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
variables de sesión

Hola,

Estoy intentando hacer mi promer script usando variables de sesión y no me funciona. Tengo tres páginas, una es un formulario para logearse, la segunda te echa fuera si no te has logeado bien, y si sí lo has hecho te presenta el menú, la tercera es un formulario correspondiente a la primera opción del menú, pero que antes de presentarlo, comprueba si estás corréctamente logeado, y si no lo estás te echa.

El problema que tengo es que en la tercera página siempre te echa, esté logeado o no. Si pruebo a que me muestre la variable de sesión no me la muestra. también he probado a sustituir las comillas dobles por simples y pasa lo mismo.

Estos son los códigos de las tres páginas:

Código:
<html>
<form action="opciones.php" method="post">
Usuario: <input type ="text" name ="usuario"><br>
Contraseña: <input type= "text" name="contrasena"><br>
<input type ="submit" value ="LOG IN">
</form>
<a href= "formregistro.html">REGÍSTRATE</a>
</html>

Código:
<html>
<?php
$lognick=$_POST['usuario'];
$logpass=$_POST['contrasena'];
$link=mysql_connect("localhost","root","");
mysql_select_db(dbimagenes,$link);
$result = mysql_query ("select count(*) FROM autores WHERE nick='".$lognick."' AND contraseña='".$logpass."'"); 
$login=mysql_result($result,0);
if (!$login){
    die ("login incorrecto");
    }
else{
    echo "login correcto<br>";
    $_SESSION["login"]=1;
   
}
?>

<li> <a href = "forminsertimage.php"> Añadir imagen </a></li>
<li> <a href = "buscatipo.php"> Buscar imagen por tipos </a></li>
<li><a href = "buscaclave.php"> Bucar imagen por palabra clave </a></li>
<li><a href = "buscaautor.php"> Bucar imagen por autor</a></li>
<li><a href = "buscafecha.php"> Bucar imagen por fecha </a></li>
<li><a href = "buscaavanzada.php"> Búsqueda avanzada </a></li>
</html>
Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <title>Añadir imagen</title>
</head>
<body>
    <?php
    $login=$_SESSION["login"];
    echo "$_login";
        if (!$login){
                       die("USTED NO ESTÁ EN EL SISTEMA");
        }
    ?>
        <form action="insertimage.php" method="post">
        Introduce palabras clave: <input type = "text" name="claves"><br>
        Introduce la ruta del fichero: <input type ="file" name="fichero"><br>
        Introduce el código de clasificación:<input type = "text" name="codigo">
</body>
</html>
  #2 (permalink)  
Antiguo 24/08/2009, 08:14
machoman112233
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: variables de sesión

Te falta el session_start() arriba del todo...
  #3 (permalink)  
Antiguo 24/08/2009, 09:10
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
Respuesta: variables de sesión

He modificado el código segundo así:

Código:
<html>
<?php
session_start ();
$lognick=$_POST['usuario'];
$logpass=$_POST['contrasena'];
$link=mysql_connect("localhost","root","");
mysql_select_db(dbimagenes,$link);
$result = mysql_query ("select count(*) FROM autores WHERE nick='".$lognick."' AND contraseña='".$logpass."'"); 
$login=mysql_result($result,0);
if (!$login){
    die ("login incorrecto");
    }
else{
    echo "login correcto<br>";
    $_SESSION["login"]=1;
   
}
?>

<li> <a href = "forminsertimage.php"> Añadir imagen </a></li>
<li> <a href = "buscatipo.php"> Buscar imagen por tipos </a></li>
<li><a href = "buscaclave.php"> Bucar imagen por palabra clave </a></li>
<li><a href = "buscaautor.php"> Bucar imagen por autor</a></li>
<li><a href = "buscafecha.php"> Bucar imagen por fecha </a></li>
<li><a href = "buscaavanzada.php"> Búsqueda avanzada </a></li>
</html>
Y me da este mensaje:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\imagenes\opciones.php:2) in C:\xampp\htdocs\imagenes\opciones.php on line 3

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\imagenes\opciones.php:2) in C:\xampp\htdocs\imagenes\opciones.php on line 3
login correcto

Añadir imagen
Buscar imagen por tipos
Bucar imagen por palabra clave
Bucar imagen por autor
Bucar imagen por fecha
Búsqueda avanzada
  #4 (permalink)  
Antiguo 24/08/2009, 09:41
 
Fecha de Ingreso: julio-2009
Ubicación: .mysql_error ( XD )
Mensajes: 554
Antigüedad: 14 años, 9 meses
Puntos: 13
Respuesta: variables de sesión

páginadelogin.php
Código PHP:
<?php
$lognick
=$_POST['usuario'];
$logpass=$_POST['contrasena'];

$link mysql_connect ("localhost""root""") or die ("Error al Conectar!");
mysql_select_db ("dbimagenes"$link) or die ("Verifique la Base de Datos");
$login = ("select * from autores where nick='$lognick'");
$resultado mysql_query($login);
    
if (
$fila mysql_fetch_array($resp))
{
    if (
$lognick == $fila['nick'] && $logpass == $fila['contraseña'])
    {
        
$_SESSION['usuario'];
        
header("location: tupáginadeinicio.php");
    }
    
    else
    {
        echo 
"Login Incorrecto";
    }
}

else
{
    echo 
"Login Incorrecto";
}
?>

tupáginadeinicio.php
Código PHP:
<?php
session_start
();
if (isset(
$_SESSION['usuario'])) {
    echo 
"Bien wn... te logeaste!!";
}

else {
    echo 
"<script>alert('Usted NO Tiene Permiso Para Acceder a Esta Página!')</script>";
    echo 
"<script>history.back()</script>";
}
?> //este script lo debes poner al principio de TODAS las páginas


Bienvenido <?php echo $_SESSION['usuario']  ?> // para mostrar el usuario logeado

saludos!
  #5 (permalink)  
Antiguo 25/08/2009, 09:20
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
Respuesta: variables de sesión

Gracias twonex, pero además de tener un códio qu efunciona me gustaría saber por qué no funciona el mío.

Pasa igual con el select que no me funcionaba aquí.

Ahora tú lo haces igual que lo hacía yo y sí te funciona, y acabo sin entender nada
  #6 (permalink)  
Antiguo 25/08/2009, 10:07
 
Fecha de Ingreso: julio-2009
Ubicación: .mysql_error ( XD )
Mensajes: 554
Antigüedad: 14 años, 9 meses
Puntos: 13
Respuesta: variables de sesión

básicamente lo único que estoy modificando son tus validaciones
he visto codigos con el count y generalmente arrojan errores
he aqui un ejemplo
yo uso el count solo para contar XD
por lo cual siempre prefiero generar consultas de las más simples y asi no me sicoseo del porque las cosas no funcionan... la solucion a un error de algo simple por lo general tambien es simple :P


otra cosa... es que esta linea session_start(); la pusiste dentro del <HTML> y va afuera de este, osea, esa linea va primero que cualquier otra cosa.
el error que pusiste que te da es simplemente por eso

espero haberte ayudado!
saludos
  #7 (permalink)  
Antiguo 26/08/2009, 12:21
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
Respuesta: variables de sesión

He puesto el session_start(); en la primera página que se abre al iniciar la sesión. Ya no me da el error, pero cuando me logeo, me actúa como si no me hubiera logeado, es decir, me dice "USTED NO ESTÁ EN EL SISTEMA". Voy a poner los códigos otra vez:
Código:
<html>
<?php
session_start ();
?>
<form action="opciones.php" method="post">
Usuario: <input type ="text" name ="usuario"><br>
Contraseña: <input type= "text" name="contrasena"><br>
<input type ="submit" value ="LOG IN">
</form>
<a href= "formregistro.html">REGÍSTRATE</a>
</html>


Código:
<html>
<?php
$lognick=$_POST['usuario'];
$logpass=$_POST['contrasena'];
$link=mysql_connect("localhost","root","");
mysql_select_db(dbimagenes,$link);
$result = mysql_query ("select count(*) FROM autores WHERE nick='".$lognick."' AND contraseña='".$logpass."'"); 
$login=mysql_result($result,0);
if (!$login){
    die ("login incorrecto");
    }
else{
    echo "login correcto<br>";
    $_SESSION["login"]=1;
   
}
?>

<li> <a href = "forminsertimage.php"> Añadir imagen </a></li>
<li> <a href = "buscatipo.php"> Buscar imagen por tipos </a></li>
<li><a href = "buscaclave.php"> Bucar imagen por palabra clave </a></li>
<li><a href = "buscaautor.php"> Bucar imagen por autor</a></li>
<li><a href = "buscafecha.php"> Bucar imagen por fecha </a></li>
<li><a href = "buscaavanzada.php"> Búsqueda avanzada </a></li>
</html>
Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <title>Añadir imagen</title>
</head>
<body>
    <?php
    $login=$_SESSION["login"];
    echo "$_login";
        if (!$login){
                       die("USTED NO ESTÁ EN EL SISTEMA");
        }
    ?>
        <form action="insertimage.php" method="post">
        Introduce palabras clave: <input type = "text" name="claves"><br>
        Introduce la ruta del fichero: <input type ="file" name="fichero"><br>
        Introduce el código de clasificación:<input type = "text" name="codigo">
</body>
</html>
twonex, dices que ponga el session_start() antes del html, pero¿No es una sentencia php y debe ir dentro del script? Por otro lado ¿La sesión se inicia sólo en una página, en la primera, no? Y bueno, el erroro no me aparece ya, no sé si el problema es cuestión del sesion start.
  #8 (permalink)  
Antiguo 26/08/2009, 13:56
 
Fecha de Ingreso: julio-2009
Ubicación: .mysql_error ( XD )
Mensajes: 554
Antigüedad: 14 años, 9 meses
Puntos: 13
Respuesta: variables de sesión

Un script es un conjunto de instrucciones, por lo cual cada fragmento o trozo de codigo que haga algo es un script, ante ello el session start es de gran importancia y debe ejecutarse antes de iniciar la página html

Código php:
Ver original
  1. <?php
  2. ?>
  3.  
  4. <html>
  5. ....
  6. </html>

aunque te recomiendo que en la página de login pongas este script

Código php:
Ver original
  1. <?php
  2. if (isset($_SESSION['usuario'])) {
  3.     header ("location: tupáginadeinicioquenoesellogin.php");
  4. }
  5.  
  6. else {
  7.     echo "";
  8. }
  9. ?>[
]

lo que hace es que si el usuario está logeado y cambia la página sin haber cerrado la sesion cuando vuelva no se tenga que logear nuevamente.

respecto a tu pregunta estás en lo correcto, la sesion solo se inicia o crea una sola vez y en solo una página, la del login! aunque es recomendable validarla en cada página que igreses o uses, asi mismo estás manejando privilegios... si el usuario no está logeado y sabe la url no podrá entrar.

referente al codigo que pusiste, me percato que es el mismo de antes, si aun no te funciona coloca el codigo que tienes ahora (actualizado, no la misma wea de recien) y lo seguimos chequeando...

saludos
  #9 (permalink)  
Antiguo 28/08/2009, 14:28
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
Respuesta: variables de sesión

Gracias twonex, lo que me desconcertaba era el hecho de que se pusiera script antes de <html>, pensaba que eso no se podía hacer. También me liaba lo de iniciar la sesión en cada página. Ya he puesto un código parecido al tuyo y me va bien.

Me desconcierta un poco este foro, porque a pesar de que la gente contesta y procura ayudar, mucha gente no contesta directamente a las preguntas sino que propone codigos alternativos o da "pistas", y en general no explica los fallos o donde está el concepto erróneo que yo pueda tener, así que me voy atascando a cada momento. Me resulta raro porque soy muy novato y entiendo que mis dudas deben ser suficientemente básicas para que las resolviera cualquiera, pero bueno, imagno que alguna razón habrá.
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 08:19.