Foros del Web » Programando para Internet » PHP »

Como hacer para autentificar usuario y restringir paginas con PHP???

Estas en el tema de Como hacer para autentificar usuario y restringir paginas con PHP??? en el foro de PHP en Foros del Web. Hola a todos..!! Este es mi primer tema y espero puedan ayudarme Les explico con detalles: Desde mas de 6 meses he estado intentando crear ...
  #1 (permalink)  
Antiguo 08/09/2009, 23:24
 
Fecha de Ingreso: septiembre-2009
Mensajes: 86
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta Como hacer para autentificar usuario y restringir paginas con PHP???

Hola a todos..!! Este es mi primer tema y espero puedan ayudarme

Les explico con detalles:
Desde mas de 6 meses he estado intentando crear una pagina web con registro de usuarios, esto me costo bastante pero luego de buscar como loco tutoriales , explicaciones y ejemplos al fin logre crear la base de datos con Mysql y php y el registro de usuarios que al parece ha quedado bien.

Ese fue el primer obstáculo, "la creacion o registro de usuarios", (que me costo un mundo jeje!) ahora busco dos cosas:

1. Que se reconozca en todas las paginas al usuario, saludandolo con su nombre y apellido, como "Bienvenido Kaiseer" o "Bienvenido Visitante" en caso de no haber iniciado sesión.

y 2. Quisiera colocar 3 paginas (una planilla, y otras dos pags. con descargas) sólo para usuarios registrados. En la que, en caso de querer entrar y no haber iniciado sesion o registrado, aparezca una pagina diciendo que esta restringiga para visitantes, que registre o ingrese en caso de ya estar registrado.

Al parecer ya tengo gran parte, pues como verán (en los codigos) ya tengo el login.php que tiene los campos 'login' y 'password' para entrar. Luego que se entra (con usuario y contraseña correcta) efectivamente me lleva a user.php (pagina a la que se va al reconocer el usuario y la contraseña en la base de datos)y me sale lo que esta predeterminado Bienvenido 'no se quien'.. tu nick es 'no se que cosa'

Mi problema es que -como no se casi de nada de php y es un milagro haber llegado a donde estoy, jeje- no tengo la menor idea de como hacer que en todas las demas paginas que se abran luego del ingreso salga el "saludo personalizado" y que se tenga el acceso libre a todas las paginas; y al mismo tiempo un codigo para restringir ciertas paginas a los visitantes que no se han registrado o ingresado. (disculpen por escribir tanto paginas..!!! ) Es decir, que se guarde la informacion del ingreso y este por un tiempo hasta que cierre la sesión o esta expire..

BUeno ahora si les muestro los codigos:

Primero les muestro los de registro, por si akso..!!

este es el crea_usuarios.php (la "action" del formulario que cree)

<?
include("conexion.php"); /*Aqui la conexion*/
/*Recibimos las variables por el metodo POST*/
$login = $_POST['login'];
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];
$nombre= $_POST['nombre'];
$apellido= $_POST['apellido'];
$pais= $_POST['pais'];
$estado= $_POST['estado'];
$edad= $_POST['edad'];
$email = $_POST['email'];
/*Hacemos la consulta */

$query="SELECT * FROM usuarios WHERE login='$login'";
$link=mysql_connect($server,$dbuser,$dbpass);
$result=mysql_db_query($database,$query,$link);
if(mysql_num_rows($result)){
header ("location: usuario_registrado.htm");
} else {
mysql_free_result($result);
/* Ahora comprovamos que los dos pass coinciden */
if($pass1!=$pass2) {
header ("Location: contra_no_coinciden.htm");
echo 'Clica <a href="registro.htm">aquí</a> para volver al formulario';
} else {
$pass1=crypt($pass2, "semilla");
/* Encripatmos el password, con la clave "semilla" */
$query="INSERT INTO usuarios (login, nombre, apellido, pais, estado, password, edad, email) VALUES ('$login','$nombre','$apellido', '$pais', '$estado', '$pass1', '$edad','$email')";
$result=mysql_db_query($database,$query,$link);
if(mysql_affected_rows($link)){
header ("Location: registro_exitoso.htm");
} else {
echo "Error introduciendo el usuario";
} /* Cierre del else */
} /* Cierre del else que corresponde a if(mysql_affected_rows.....) */
} /* Cierre del else que corresponde a if(mysql_num_rows...) */
?>


Con eso esta listo.. el registro funciona re-bien

Ahora el ingreso de usuarios..!

Primero el comprueba.php, que es la action del form "login"

<?
session_start();

include("conexion.php");

$login = $_POST['login'];
$pass = $_POST['pass'];

$query="SELECT * FROM usuarios WHERE login='$login'";

$link=mysql_connect($server,$dbuser,$dbpass);
$result=mysql_db_query($database,$query,$link);
if(mysql_num_rows($result)==0){
header ("location: usuario_incorrecto.htm");
} else {
$array=mysql_fetch_array($result);
if($array["password"]==crypt($pass,"semilla") ){

$_SESSION["login"]=$login;
$_SESSION["nombre"]=$array["nombre"];
header("location:user.php");

} else {
header ("location: contra_incorrecta.htm");
}
}

?>


Luego el login.php que es para el ingreso

<?
session_start();
if(isset($SESSION)){
header("location: home.htm"); /* Si ha iniciado la sesion, vamos a user.php */
} else {
/* Cerramos la parte de codigo PHP porque vamos a escribir bastante HTML es mas cómodo así que metiendo echo's */
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Identificaci&oacute;n </title>
</head>
<body>
<form action="comprueba.php" method="POST" class="login">
<p align="center"><b><font face="Trebuchet MS" color="#FFFFFF" size="2">Nombre
de usuario:</font></b> <input type="text" name="login" size="18"></p>
<p><b><font face="Trebuchet MS" size="2" color="#FFFFFF">Contraseña:</font></b>
<input type="password" name="pass" size="18"><br>
&nbsp;</p>
<div style="position: absolute; width: 43px; height: 21px; z-index: 1; left: 38px; top: 115px" id="capa75">
<input type="submit" value="Entrar" class="boton"></div>
</form></body></html>
<?
} /* Y cerramos el else */
?>



Finalmente tengo el User.php, que es al que voy cuando el login es correcto


<?
session_start();
if(!isset($_SESSION)){
header("location:login.php");
} else {


echo "<html><body>";
echo "<strong><font align='center' color='white' size='3' face='Trebuchet MS'>¡Hola! <strong></font><br>";
echo $_SESSION["nombre"]." ";
echo "</strong><font color='white' size='3' face='Trebuchet MS'><br>Tu nick: <strong><br></font> ";
echo $_SESSION["login"];
echo "<font color='white' size='3' face='Trebuchet MS'></strong><br> Bienvenido</font>";
echo "</body></html>";
}
?>

En conclusion.. ¿que hago para que se reconozca a un usuario en todas las paginas luego del ingreso? y ¿como restrinjo a los visitantes en ciertas paginas, haciendolas solo disponibles para usuarios?

Esto es todo, segun lo que he leido (si es que he entendido algo) al parecer hacen falta cookies o sessions.. yo que se..!! Pero cuento con su aporte..! han sido largos estos ultimos meses porque no he dado con la solucion!!

Me ha fascinado Foros del Web, espero puedan entender lo que necesito..!!

GraciAssS!!
  #2 (permalink)  
Antiguo 09/09/2009, 02:29
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Como hacer para autentificar usuario y restringir paginas con PHP???

haber para restringir al visitantes seria asi:

Código PHP:
if($_SESSION["login"]){
echo 
"Estas logueado y por eso ves esto";
}else{
echo 
"Eres un visitante por eso ves esto";

luego si quieres mostrar el nombre puedes hacerlo tambien

Código PHP:
echo "Hola".$_SESSION["nombre"]; 
esto es segun los datos que veo en tu codigo

ah!!! y recuerda indicar session_start(); en todas las paginas que vayas a usar la sesion ;)
  #3 (permalink)  
Antiguo 09/09/2009, 08:28
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Como hacer para autentificar usuario y restringir paginas con PHP???

Tal cual lo que te dicen. Tenes que definir mejor la variable sesino:

if(isset($_SESSION["login"])) { tal cosa }
else {otra cosa }

Inicializas la variable en una pagina PHP:

<?php session_start();
$_SESSION['login'] = "cierto" // con que este seteada la variable, basta.
?>

Luego, en cada pagina que tenga <?php session_start(); ?> puedes lanzar el if y comprobar si existe tal variable de sesion como para volcar o no contenidos.
  #4 (permalink)  
Antiguo 09/09/2009, 09:27
 
Fecha de Ingreso: julio-2009
Ubicación: .mysql_error ( XD )
Mensajes: 554
Antigüedad: 14 años, 9 meses
Puntos: 13
Respuesta: Como hacer para autentificar usuario y restringir paginas con PHP???

finalmente para mostrar al usuario logeado haz esto:

Código PHP:
Bienvenido <?php echo $_SESSION['usuario']  ?>
ahora, para restringir accesos eso depende de lo que uses
si usas una tabla simple hasta con un simple if puedes restringir el menu
pero debes tener la variable session creada primero que todo!

Código php:
Ver original
  1. <?php
  2. if ($_SESSION['privilegios'] == "Logeado")
  3. {
  4.     ?> <td><a href="tu link donde quieres que te lleve.php"> Opcion </a></td> <?php
  5. }
  6. else
  7. {
  8.     echo "";
  9. }
  10. ?>


y finalmente mira mi firma XDD
saludos...
__________________
Mi Bosque de Sombras Solo Doom Metal!

por favor use esta etiqueta para publicar su código --->[HIGHLIGHT]
  #5 (permalink)  
Antiguo 09/09/2009, 09:37
 
Fecha de Ingreso: septiembre-2009
Mensajes: 86
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como hacer para autentificar usuario y restringir paginas con PHP???

Gracias Rompeguesos, Mayid y Townex!! Está perfecto!!, ahora si reconoce a los usuarios y puedo restringir páginas..!! Mchas gracias por su tiempo! Son lo mejor..!

Ah! una cosa..! ¿hay alguna manera de que al cerrar la ventana luego de ingregar siga guardando la informacion de ingreso por un tiempo determinado?? Pues, actualmente si cierro el explorador y vuelvo a abrir me reconoce como visitante de nuevo..!!

Última edición por kaiseer; 09/09/2009 a las 09:50
  #6 (permalink)  
Antiguo 09/09/2009, 10:00
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Como hacer para autentificar usuario y restringir paginas con PHP???

pues creo que eso ya hay que hacerlo con cookies yo de momento no he hecho eso asi que no te puedo ayudar :S
  #7 (permalink)  
Antiguo 30/09/2009, 11:13
 
Fecha de Ingreso: septiembre-2009
Mensajes: 86
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como hacer para autentificar usuario y restringir paginas con PHP???

Hola de nuevo a todos..!! Hasta ahora he trabajado muy bien gracias a la ayuda que me han dado. Pero ahora tengo otro problema. Por alguna razón, desde que cambie de hosting y se migró el contenido, en el registro luego de enviar los datos del nuevo usuario y a la base de datos sale esto:

Warning: Cannot modify header information - headers already sent by (output started at /home/makingpo/public_html/registro/crea_usuarios.php:1) in /home/makingpo/public_html/registro/crea_usuarios.php on line 19

y al mismo tiempo en el login que esta en todas las paginas tambien salen 2 errores como el de arrriba. Click aqui para que vean

He buscado "." "*" y espacios en el codigo y no es nada de eso, ademas no he hecho ninguna modificacion.

Gracias de antemano por su gran ayuda.

Saludos!
  #8 (permalink)  
Antiguo 30/09/2009, 18:47
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 9 meses
Puntos: 32
Respuesta: Como hacer para autentificar usuario y restringir paginas con PHP???

Ese error sale cuando envias informacion antes de una cabecera

Esto podria probocar ese error, o q realices una redireccion con header y antes tener informacion.

Intentemos algo, pon tu contenido dentro de ob_start(); y al final de la pagina pones ob_end_flush()

Con eso se enviaran todas las cabeceras y despues el contenido

ob_start();

// Pagina html o contenido etc

ob_end_flush() ;
  #9 (permalink)  
Antiguo 30/09/2009, 18:59
Avatar de intiweb  
Fecha de Ingreso: mayo-2009
Ubicación: Capital Federal
Mensajes: 363
Antigüedad: 15 años
Puntos: 5
Respuesta: Como hacer para autentificar usuario y restringir paginas con PHP???

si cambiaste de hosting tiene mucho que ver la configuracion que tiene el php.ini que tiene tu nuevo hosting, yo muchas veces hice paginas que en mi localhost funcional de lujo pero cuandop lo subis no anda. por eso lo recomendable es encontrar un servidor de hosting confiable el cual con el tiempo vos terminas conosiendo su configuracion y que si tenes algun problema de este tipo le pidas que te activen tal o cual parte del ini y lo hagan o sea con un buen soporte tecnico... mejor pagar mas y andar mejor
  #10 (permalink)  
Antiguo 30/09/2009, 19:55
 
Fecha de Ingreso: septiembre-2009
Mensajes: 86
Antigüedad: 14 años, 7 meses
Puntos: 0
Hola intiweb, gracias por tu respuesta, tiene logica pues, antes no tenia este problema, ne dices entonces que pida a los del hosting que camben la configuracion para que funcione? Estuve leyendo y encontre esto:

Cita:
En algunas ocasiones el error puede aparecer porque la configuración de PHP en el servidor tiene activa (en On) la directiva display_errors

Al apagar (poner en Off) la directiva display_errors, el error puede desaparecer. Esta directiva se puede modificar mediante un archivo .htaccess o php.ini. Mediante .htaccess, se puede hacer poniendo una línea de este modo:

php_value display_errors "Off"
Esto lo puedo hacer yo mismo??

Hola acoevil, intente lo que me has dicho pero sigue saliendo el error. Crees que sea por la configuracion PHP del servidor? pues fue justo cuando cmbie de hosting que empezo este problema.. Gracias por tu ayuda

Última edición por GatorV; 30/09/2009 a las 21:20
  #11 (permalink)  
Antiguo 30/09/2009, 20:58
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 9 meses
Puntos: 32
Respuesta: Como hacer para autentificar usuario y restringir paginas con PHP???

Q tal, para personalizar q errores se mostraran y cuales no, existe la funcion error_reporting() de php, con esta funcion no tendras q pedirle a tu hosting q desactive los errores.

error_reporting(E_ALL & ~E_NOTICE);

int error_reporting ( [int $nivel] )

La función error_reporting() establece la directiva error_reporting en tiempo de ejecución. PHP tiene varios niveles de errores, el uso de esta función define ese nivel para la duración (tiempo de ejecución) de su script.


Por otro lado, veo que en el archivo comprueba.php realizas redirecciones como esta
header ("location: usuario_incorrecto.htm"); verifica q en esa pagina no imprimas algo antes.


Mira esto http://www.forosdelweb.com/f18/login...-error-740208/
  #12 (permalink)  
Antiguo 05/10/2009, 21:47
 
Fecha de Ingreso: septiembre-2009
Mensajes: 86
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como hacer para autentificar usuario y restringir paginas con PHP???

Hola ACOEVIL! Mil gracias por el link!! Ya en el login no sale el error, era justamente porque se habian agregado unos simbolos antes de "<?" y con el CuteFTP los puede quitar.. Mil gracias!! bueno sigo todavia con el error en el registro de usuario pero al menos ya se ha solucionado uno de los errores..!!

Saludos!
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:52.