Foros del Web » Programando para Internet » PHP »

Problema PHP identificacion y sesiones

Estas en el tema de Problema PHP identificacion y sesiones en el foro de PHP en Foros del Web. Hola a todos, espero que me pueda ayudar alguien con mi primer mensaje. Soy bastante novato en php y mysql, y me gustaria que alguien ...
  #1 (permalink)  
Antiguo 30/07/2010, 04:22
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Problema PHP identificacion y sesiones

Hola a todos, espero que me pueda ayudar alguien con mi primer mensaje.

Soy bastante novato en php y mysql, y me gustaria que alguien me echase una mano si es posible claro.

Decir que he leido bastantes tutoriales por internet, pero no hay manera, no consigo lograr lo que quiero.

Estoy creando una especie de tienda virtual, a continuacion relato los pasos seguidos:



Primero accedo a un index.htm, donde se puede elegir entre el registro de un usuario, o el login en el sistema.


SI ELIGE REGISTRO:
Tengo un formulario en htm (registro.htm), que envia los datos introducidos a registro.php, y este los guarda en la base de datos
Decir que me guarda todo correctamente, con la contraseña encriptada y demas, y hasta que no cliqueo en un link de activacion que se envia al correo, no se activa dicho usuario (no se pone a 1 el campo activo de la tabla de usuarios)

SI ELIGE LOGIN:
Accede a una pagina login.php, mete su nickname y su contraseña.
-NO ESTA REGISTRADO O NO ESTA ACTIVADO: se le advierte con un mensaje
-METE MAL LA CONTRASEÑA: se le dice que para dicho nick, la contraseña es erronea
-INTRODUCE LOS DATOS CORRECTAMENTE: muestra un mensaje de que lo ha hecho bien : AQUI ESTA MI PROBLEMA!!


Quiero que al meter los datos correctamente se acceda a una nueva pagina a la cual solo se puede tener acceso en caso de haber realizado el login en el sistema correctamente.
He leido que se hace mediante sesiones, con el uso de session_start, pero no hay manera, al tratar de direccionarle con el header("Location: paginasegura.php"); no me lleva a ningun lado, y siempre me dice que los headers siempre fueron enviados.
Decir que en todas las paginas php, al principio de ellas he puesto <?php session_start() ?> ya que de no ponerlo, el funcionamiento de todo era correcto, pero me aparecian warnings (pero me guardaba los datos bien en la base de datos, activa el usuario, comprueba que el user y contraseña son correctos, pero salen warnings).


A ver si alguien me puede echar una mano, aqui dejo el codigo del login.php y de controllogin.php (el cual verifica que el nick y contraseña con correctos) espero que alguien me pueda guiar.

CODIGO LOGIN.PHP
Código:
<html>
   <title>
	Login de usuario en la tienda virtual
   </tile>



   <body>

	<B> LOGIN DEL USUARIO </B>
	<br><br><br><br>
	Por favor, introduzca los datos que se le piden para poder acceder a la web
	<br><br><br><br>


	<form method=post ACTION="controllogin.php">
		NICKNAME:
			<input name="nickname" type="text">
			<br><br>
		PASSWORD:
			<input name="password" type="password">
			<br><br><br><br>

			<input type=submit value="ENVIAR">


	
	</form>

   </body>

</html>

CODIGO CONTROLLOGIN.PHP
Código:
<?php

   //Archivos externos que usaremos

   include("./funciones/conectar.php");
   include("./funciones/comprobarpass.php");

   //ponemos cada dato recibido del formulario de login en 1 variable
   $nickname=$_POST["nickname"];
   $password=$_POST["password"];

	

   //Variables para la base de datos
   $dbhost="localhost";
   $dbuser="root";
   $dbpass="*******";
   $db="tienda";


   conectar(1);

   comprobarpass($nickname,$password);

   conectar(0);


?>

CODIGO FUNCION COMPROBARPASS.PHP
Código:
<?php
   function comprobarpass($nickname,$password)
	{			
	   $pass2 = sha1($password);

   	   //Sentencia SQL para ver si ese nick se encuentra en la base de datos
  	   $sql = "SELECT * FROM clientes WHERE nickname='$nickname' and activo=1";
	   //Ejecuto la sentencia
   	   $rs = mysql_query($sql); 

   	   if (mysql_num_rows($rs)!=0)
		{
	   	   $sql2 = "SELECT * FROM clientes WHERE nickname='$nickname' and password='$pass2' and activo=1";
	   	   $rs2 = mysql_query($sql2);
		   if (mysql_num_rows($rs2)!=0)
			{
			   echo ("Bienvenido $nickname a la tienda virtual");
		   	}
		   else
		   	{
	   		   echo ("La contraseña introducida para $nickname no fue valida");
		   	}			
   		}
	   else 
		{
	   	   echo ("Usted no esta registrado en esta pagina o aun no ha acivado su usuario");
		} 
	}
?>

Muchas gracias por vuestro tiempo.
  #2 (permalink)  
Antiguo 30/07/2010, 04:51
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Problema PHP identificacion y sesiones

Cuando realizas un reedireccionamiento utilizando "header('location xxx');" no puedes enviar ningún tipo de salida antes del "header", esto abarca cualquier función que realice un "echo, var_dump, print_r, etc", tampoco puede a ver espacios en blanco, ni tampoco ningun tag html fuera de los tag <?php y ?> porque te enviara error
Código PHP:
Ver original
  1. <?php
  2. //Ejemplos
  3.  
  4. echo 'hola mundo';
  5. header('location index.php'); //esto marcara error
  6. ?>
Código PHP:
Ver original
  1. <div id="midiv">
  2. <?php header('location: index.php'); //esto también marcara error ?>
  3. </div>
Código PHP:
Ver original
  1. <?php
  2. header('location: index.php'); //y esto de nuevo mandara error porque antes del <?php hay un espacio en blanco

Nota: Se me olvidaba comentarte algo, el manejo de tus variables POST es de lo peor (no lo tomes a mal), ya que no filtras en absoluto lo que tus usuarios están enviando, un usuario mal intencionado puede realizar un XSS, inyección SQL y tumbar todo tu trabajo, así que mejora la seguridad de tus variables tanto GET como POST, puedes checar el siguiente tema y busca en Google sobre XSS y SQL Injection
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 30/07/2010 a las 05:00
  #3 (permalink)  
Antiguo 30/07/2010, 08:01
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Problema PHP identificacion y sesiones

Gracias por la respuesta Nemutagk!

Entonces, el problema es por los echos que tengo en el codigo??? (son echos que he puesto para comprobar que llegaba hasta esa zona, ya que no sabia si llegaban, que soy novato en esto jeje)

Y puedo poner un header como resultado de un bucle if???


Supongo que con el header su uso seria:

Código:
header:(Location: paginasegura.php);
Y que solo eso ya me llevaria directamente a paginasegura.php, estoy en lo cierto?? Y antes de ello deberia haber hecho un session_start() para mantener las variables de sesion y poder controlar que esta logeado un usuario en el sistema verdad???




Y sobre lo de las variables POST, no me lo tomo a mal para nada, todo lo contrario ya que como digo soy novato en esto, y todo lo nuevo que pueda aprender es siempre bien recibido. Supongo que es un metodo de seguridad que se debe llevar a cabo.

Imagino que debo usar alguna funcion del estilo a las que aparecen en el link que me has puesto, espero probarlo esta tarde si me da tiempo y comentare el resultado final.


Muchas gracias de nuevo por todo, y gracias por el tiempo de la gente :)
  #4 (permalink)  
Antiguo 30/07/2010, 08:25
 
Fecha de Ingreso: octubre-2000
Mensajes: 1.692
Antigüedad: 23 años, 6 meses
Puntos: 19
Respuesta: Problema PHP identificacion y sesiones

si te es problematico el header para redireccionar podrías usar para redireccionar un codigo javascript:

Código PHP:

echo "<script>window.location='paginasegura.php'</script>"
__________________
PD: Con amor, fe, amor a Dios y amistad podemos hacer un mundo mejor!!!!
  #5 (permalink)  
Antiguo 30/07/2010, 08:52
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Problema PHP identificacion y sesiones

Cita:
Iniciado por Trulala de cordoba Ver Mensaje
si te es problematico el header para redireccionar podrías usar para redireccionar un codigo javascript:

Código PHP:

echo "<script>window.location='paginasegura.php'</script>"

Pero de ese modo podria realizar la autentificacion de un usuario en el sistema??

Es decir, que solo acceda a ciertas paginas aquellos usuarios que han sido logeados en el sistema, espero haberme expresado bien.

Gracias por todo
  #6 (permalink)  
Antiguo 30/07/2010, 10:38
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Problema PHP identificacion y sesiones

@Trulala de cordoba y que pasaria si el usuario que esta visitando la página tiene desactivado Javascript, la página se quedaría en blanco, ahora, no tiene caso si puedes hacerlo todo transparente al usuario con header...

@MARTIN_LAW en si el "header" puede ir donde sea, MIENTRAS ANTES DE ESTE NO TENGA SALIDAS (todo lo que te comente en el post anterior), ahora, cada vez que realices un reedireccionamiento con "header" al final debes utilizar "exit;" a menos que después del header no allá mas código que procesar...

Si vas a mostrar mensajes de error es mejor que los muestres en otra página, ahora, si no deseas esto, al final de cada mensaje (ya sea de error u otro) agregar un link para que el usuario pueda moverse sin mas y no tener que utilizar "header"

Con session_start() siempre tiene que estar al comienzo del código si vas a utilizar sesiones ($_SESSION), y claro sin salidas tampoco antes de este
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #7 (permalink)  
Antiguo 03/08/2010, 02:12
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Nada, no hay manera, no logro que me funcione el header....

He eliminado los echos de mi codigo, los comentarios, pongo el session_start al comienzo, pero a la hora de usar el header me dice que ya fueron enviadas las cabeceras......


Creo que voy a empezar de cero y probar de otro modo a ver si descubro que es lo que me falla, porque la verdad no lo entiendo.

Un saludo y muchas gracias por todas las respuestas.

Hola de nuevo, podria ser el error del header y que no me funcionaba correctamente porque antes de poner el header hacia llamadas a funciones????

Un saludo y espero que alguien pudiera resolverme si esto es asi.

Última edición por GatorV; 03/08/2010 a las 08:59
  #8 (permalink)  
Antiguo 03/08/2010, 05:55
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Problema PHP identificacion y sesiones

A ver, no entendiste nada de lo que te eh dicho, no puedes llamar a la función HEADER si antes hay algún tipo de salida, en TODOS los archivos que puedan estar agregados al script original (los que agregas por métodos como include o require), no puede a ver ningun echo, print, print_r, var_dump, etc, tampoco puede existir ningún tipo de código, espacios en blanco, saltos de linea fuera de los tag <?php y ?>

Se me olvidaba, tampoco puede a ver ningún error de ningún tipo, ya que al final se consideraría una salida antes del header
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #9 (permalink)  
Antiguo 04/08/2010, 01:48
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Problema PHP identificacion y sesiones

Muchas gracias Nemutagk, la verdad es que entendia a medias lo que me explicabas, pero creo que ya lo he solucionado, ya que he vuelto a crear las funciones haciendo llamadas a ellas, y creo que el fallo lo tenia en que no colocaba correctamente el session_start dentro de los archivos de las funciones.


Ahora creo que me funciona correctamente, muchas gracias por vuestra paciencia, especialmente a Nemutagk, y creo que lo del manejo de las variables POST lo dejare para mas adelante por el momento, lo tengo apuntado para que no se me olvide, pero prefiero seguir con otras cosas mientras tanto.

Un saludo.
  #10 (permalink)  
Antiguo 12/08/2010, 09:49
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Problema PHP identificacion y sesiones

Cita:
Iniciado por Nemutagk Ver Mensaje
Nota: Se me olvidaba comentarte algo, el manejo de tus variables POST es de lo peor (no lo tomes a mal), ya que no filtras en absoluto lo que tus usuarios están enviando, un usuario mal intencionado puede realizar un XSS, inyección SQL y tumbar todo tu trabajo, así que mejora la seguridad de tus variables tanto GET como POST, puedes checar el siguiente [URL="http://www.forosdelweb.com/f18/funcion-para-evitar-xss-sql-injection-828715/"]tema[/URL] y busca en Google sobre XSS y SQL Injection
Hola compañero, aqui estoy de nuevo.

Quiero solucionar ese tema de seguridad de la mejor forma posible, como lo conseguiria, seria valido usar la funcion "filterXSS" que pone en ese otro post el compañero GatorV ????

Con eso solventaria dicho problema de seguridad??

Un saludo y gracias por las ayudas
  #11 (permalink)  
Antiguo 12/08/2010, 10:10
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Problema PHP identificacion y sesiones

Pues si, en teoría si te protegería, pero el hecho no solo es de hacer copy/paste de una función, si no que investigues que es y como se hace cada cosa para estar preparado ante un problema
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #12 (permalink)  
Antiguo 12/08/2010, 10:24
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Problema PHP identificacion y sesiones

Cita:
Iniciado por Nemutagk Ver Mensaje
Pues si, en teoría si te protegería, pero el hecho no solo es de hacer copy/paste de una función, si no que investigues que es y como se hace cada cosa para estar preparado ante un problema

Estoy leyendo informacion sobre ello para aprender el problema, pero bueno, imagino que poniendo en mi codigo fuente la procedencia de dicha funcion no haya ningun problema a la hora de usarla verdad?

Segun he visto me parece la que me proporciona mayor seguridad.

Un saludo y gracias de nuevo :)

Etiquetas: sesiones, identificador
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 21:09.