Foros del Web » Programando para Internet » PHP »

Sesiones en php para login

Estas en el tema de Sesiones en php para login en el foro de PHP en Foros del Web. Estoy creando una base de datos con php de una especia de biblioteca, para ello, en la pagina de inicio tengo que crear una pagina ...
  #1 (permalink)  
Antiguo 06/03/2012, 04:48
 
Fecha de Ingreso: marzo-2012
Mensajes: 16
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta Sesiones en php para login

Estoy creando una base de datos con php de una especia de biblioteca, para ello, en la pagina de inicio tengo que crear una pagina de logueo. por defecto, tengo un usuario creado llamado invitado, donde, al loguearse, lo manda a la pagina invitado.php. Lo que quiero hacer es que no se pueda acceder a invitado.php directamente desde la barra de direcciones sin antes haber sido logueado. Supongo que habria que hacer el uso de sesiones, pero llevo horas probando y probando y no consigo que me funcione. El código es el siguiente:

index.php:
<html>
<head>
<title>Login</title>
</head>
<body background=images.jpg bgproperties=fixed text=white link=red vlink=green alink=yellow>
<form name="form1" method="post" action="estructura.php">
<input type="submit" value="Crear estructura">
</form>
<center>
<form name="form2" method="post" action="index2.php">
<table>
<tr><td colspan="3" align="left"><h1><font face="Comic Sans MS">GESTIÓN DE BIBLIOTECA INCA GARCILASO</font></h1></td></tr>
<td align="center" rowspan=20><img src=inca.gif></td><tr height=75><td><td></tr>
<tr><td align="center"><b>Usuario:</b></td><td><input type="text" name="usuario"></td></tr>
<tr><td align="center"><b>Contraseña:</b></td><td><input type="password" name="contra"></td></tr>
<tr><td></td><td><input type="submit" value="Entrar"></td></tr>
<tr><td></td><td><a href=registro1.php>Registrarse</a></td></tr>
<tr><td></td><td><a href=regenerarpass1.php>¿Olvidaste la contraseña?</a></td></tr>
<tr height=100><td><td><td></td></tr>
</table>
</form>

</body>
</html>


Y el otro:
index2.php:

<?php
$link=mysql_connect("localhost","genius","genius") ;
mysql_select_db("proyecto",$link);
$usuario=$_REQUEST[usuario];
$cont=$_REQUEST[contra];
$contra=md5($cont);
$resultado=mysql_query("SELECT * FROM usuarios WHERE usuario='$usuario'",$link) or die(mysql_error());
if(mysql_num_rows($resultado)!=0){
while($row=mysql_fetch_array($resultado)){

if($row["usuario"]==$usuario){
if($row["contrasena"]==$contra){
if($row["usuario"]==invitado){
echo"<script language='javascript'> alert('Bienvenido');location.href='invitado.php';</script>";
}
if($row["usuario"]==root){
echo"<script language='javascript'> alert('Bienvenido');location.href='root.php';</script>";
}
}
else{
echo"<script language='javascript'> alert('La contraseña no es correcta');location.href='index.php';</script>";
}
}
}
}
else{
echo"<script language='javascript'>alert('Este usuario no existe');location.href='index.php';</script>";
}


?>



a ver si alguien me echa una mano, esto me esta desesperando, muchas gracias
  #2 (permalink)  
Antiguo 06/03/2012, 05:31
 
Fecha de Ingreso: febrero-2011
Ubicación: Madrid
Mensajes: 62
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Sesiones en php para login

Yo lo que hice es crearme una página llamada seguridad.php, que es la que llama cada página tuya que no quieres que sea vista.

Cada página que la llama le pasa una variable en el header location (para que sepa que pagina esta entrando en seguridad), una vez llegue a seguridad.php se mira si existe esa variable o no. En caso de que sí, pues un header a esa página con una variable desession para verificar que está bien, y de lo contrario le mandas directamente de nuevo al login, con otro variable de session para indicarle que es un área retringida o como lo quieras llamar.
  #3 (permalink)  
Antiguo 06/03/2012, 06:01
 
Fecha de Ingreso: marzo-2012
Mensajes: 16
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Sesiones en php para login

Gracias, pero tengo que hacerlo sin crear esa pagina, seguridad.php, el problema que tengo es que no manejo muy bien las sesiones, y saber si alguien me puede modificar el codigo que he puesto para que se ejecuten las sesiones
  #4 (permalink)  
Antiguo 06/03/2012, 06:22
 
Fecha de Ingreso: febrero-2012
Ubicación: En mi propio mundo
Mensajes: 73
Antigüedad: 12 años, 2 meses
Puntos: 23
Respuesta: Sesiones en php para login

Lo primero que veo es que usas $_REQUEST en vez de usar $_POST para recoger tus variables.¿Pq?

Otra cosa ¿Pq mezclas php con javascript?

en vez de ...
Código PHP:
echo"<script language='javascript'> alert('Bienvenido');location.href='root.php';</script>"
Código PHP:
echo"<script language='javascript'> alert('Bienvenido');location.href='invitado.php';</script>"
no crees que sería mejor un...
Código PHP:
header(‘Location:root.php’); 
Código PHP:
header(‘Location:invitado.php’); 
Otra cosa, veo que en la consulta no usas para nada la contraseña, solo buscar por usuario. Si buscaras por usuario y contraseña te ahorras 2 if.

También veo innecesario el while($row=mysql_fetch_array($resultado)){. Pues en teoría los usuarios deben de ser únicos, por lo que la consulta solo te debe devolver una o ninguna fila dependiendo si encuentra el usuario o no en la tabla.

Veo que haces
Código PHP:
$row["usuario"]==root 
Código PHP:
$row["usuario"]==invitado 
que es root? que es invitado? una variable un string o ke?
$row["usuario"] guarda el nombre del usuario ¿no?, si es asi, segun tu código solo puede haber 2 usuarios en tu web uno llamado invitado y otro llamado root. El problema de esto es que los nuevos usuarios que se registren con nombres distintos a root o invitado no podrán acceder a ninguna de las secciones, pues solo estás diciendo que puedan entrar a la pagina invitado.php a los que se llamen invitado y a la pagina root.php a los que se llamen root.
Si lo que pretendes es que unos usuarios sean invitados y otros sean root, se me ocurren dos opciones.
1) Crearte un nuevo campo en la tabla de usuarios que indicaran el tipo de usuario que es.
2) La otra solución sería que el administrador y solo el usuario administrador se llamase root por lo que tu codigo

Código PHP:
if($row["usuario"]==invitado){
echo
"<script language='javascript'> alert('Bienvenido');location.href='invitado.php';</script>";
}
if(
$row["usuario"]==root){
echo
"<script language='javascript'> alert('Bienvenido');location.href='root.php';</script>";

sería mejor sustituirlo por
Código PHP:
if($row["usuario"]=='root')
{
    
header(‘Location:root.php’)
}else
{
   
header(‘Location:invitado.php’)

Por último que tal si en invitado.php y en root.php pones

Código PHP:
<?php

if (verificar_usuario())
{
   
//aqui debe venir todo el contenido necesario que solo el usuario validado puede acceder
   
print “Desconectarse <a href=’salir.php’/>aqui</a>;
} else 
{
   
header(‘Location:index.php’);
}
?>
Donde la funcion verificar_usuario() es una función que nos indica si el usuario está autenticado o no
De esta forma si verificar_usuario == true significa que el usuario se ha logueado por lo que mostraremos la página sino nos carga el index.php.
  #5 (permalink)  
Antiguo 06/03/2012, 06:39
 
Fecha de Ingreso: marzo-2012
Mensajes: 16
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Sesiones en php para login

Así es como me están enseñando y todo me funciona bien, lo del while es para comprobar que no exista ya el usuario que se quiere crear. Pero bueno, esa parte del código no es la que me interesa, lo que busco es que, a través de la barra direcciones, no se pueda acceder a invitado.php ni root.php, o sea, escribir http://"localhost"/invitado.php y acceder, sin antes escribir el usuario y la contraseña en el index.php.
Gracias por vuestras respuestas :)
  #6 (permalink)  
Antiguo 06/03/2012, 06:46
 
Fecha de Ingreso: febrero-2012
Ubicación: En mi propio mundo
Mensajes: 73
Antigüedad: 12 años, 2 meses
Puntos: 23
Respuesta: Sesiones en php para login

Bueno yo te he puesto ahí todo los fallos que te he visto. Aplicarlos o no es cosa tuya. Un saludo
  #7 (permalink)  
Antiguo 06/03/2012, 15:56
 
Fecha de Ingreso: marzo-2012
Mensajes: 16
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Sesiones en php para login

Muchas gracias de todos modos, es un trabajo de clase y no puedo hacerlo de la forma que me has aconsejado si no resultaría extraño para el profesor, lo único que me hacia falta es usar session_start y propagarla entre las paginas, y no se como exactamente denegar el acceso directo a la pagina invitado.php o root.php con las sesiones, esa era mi duda
  #8 (permalink)  
Antiguo 06/03/2012, 16:10
Usuario no validado
 
Fecha de Ingreso: enero-2010
Ubicación: Maturín, Monagas
Mensajes: 190
Antigüedad: 14 años, 3 meses
Puntos: 24
Respuesta: Sesiones en php para login

para validareso indistintanmente de si entra como root o invitado usa un switch

Código PHP:
Ver original
  1. $tipo_usuario ="root"; //o lo que tu vallas agregar como lo validas etc eso lo haces tu!
  2. switch ($tipo_usuario) {
  3.     case "root":
  4.         header('Location:root.php')
  5.         break;
  6.     case "invitado":
  7.         header('Location:invitado.php')
  8.         break;
  9.   default:
  10.        header('Location:error.php')
  11. }

pero yo aplicaria tomo como dijo @Fierox porque pienso igual.. saludos..

Última edición por leonagelic; 06/03/2012 a las 16:12 Razón: error de dedo..
  #9 (permalink)  
Antiguo 06/03/2012, 16:43
 
Fecha de Ingreso: marzo-2012
Mensajes: 16
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Sesiones en php para login

Lo siento pero creo que no me entendéis, creo, o soy yo el que no os entiende. A mi lo del login me funciona perfectamente, a mi manera me funciona. escribo el nombre de usuario(root o invitado) y la contraseña y accedo correctamente.
Lo que quiero es restringir a algún "listillo" que quiera acceder a root.php o invitado.php escribiendo directamente la url en la barra de direcciones sin antes loguearse, tengo entendido que es con sesiones, y este es mi problema, el código de las sesiones.

Gracias por vuestras respuestas!
  #10 (permalink)  
Antiguo 06/03/2012, 16:58
Usuario no validado
 
Fecha de Ingreso: enero-2010
Ubicación: Maturín, Monagas
Mensajes: 190
Antigüedad: 14 años, 3 meses
Puntos: 24
Respuesta: Sesiones en php para login

jejeje mira tu form es post por la url no pasara nada, por sesiones es asi cuando validas hay a tu manera solo asigna $_SESSION['USUARIO']=$tu_campo.. $tu_campo es lo que traes de la BD despues de tu consulta por ejemplo el nombre de usuario sea root invitado o arrocero.. no olvides session_start() al principio de donde uses $_SESSION['USUARIO']

en tu root.php e invitado.php lo usas asi

Código PHP:
Ver original
  1. echo "hola: ".$_SESSION['USUARIO'];

pero si pasas algo por post que en caso de tu form (method="post")no pasaran nada por url ya que para pasar por la url seria method="get"

ahora para otras restricciones y seguridad en tu BD ve este foro: http://www.forosdelweb.com/f18/ayuda...eccion-731799/ saludos espero ahora si haber ayudado..
  #11 (permalink)  
Antiguo 06/03/2012, 17:23
 
Fecha de Ingreso: marzo-2012
Mensajes: 16
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Sesiones en php para login

Siento ser un poco pesado, sigo sin explicarme o no se ya si seré yo el fallo, soy algo novato... a ver, tengo mis paginas php en una carpeta y para acceder a ellas, por ejemplo a la pagina de login, debo escribir en la barra de direcciones: localhost/proyecto/index.php y me sale la pagina que he creado de login.
Ahora, si escribo en la barra de direcciones localhost/proyecto/invitado.php, me manda, como es lógico, a la pagina invitado.php de mi carpeta. La cosa es que quiero que no se pueda acceder a la pagina invitado.php sin antes loguearme en index.php como usuario "invitado" y contraseña "genius", redirigiéndome a invitado.php.
O sea, entrar en localhost/proyecto/index.php, introducir de nombre de usuario "invitado" y contraseña "genius" y acceder a invitado.php
Gracias :D
  #12 (permalink)  
Antiguo 06/03/2012, 17:38
Usuario no validado
 
Fecha de Ingreso: enero-2010
Ubicación: Maturín, Monagas
Mensajes: 190
Antigüedad: 14 años, 3 meses
Puntos: 24
Respuesta: Sesiones en php para login

bueno igual el usuario hara eso al menos uses un tipo de framework o algo pero igual puedes entonces es en invitado.php o root.php chequear si esta logeado o no por ejemplo siguiendo lo que te puse anteriormente..

Código PHP:
Ver original
  1. if($_SESSION['usuario'])//si esta tiene algún dato
  2. echo "bienvenido";
  3. else
  4. header('Location:index.php')

pregunta si la variable de session tiene un dato si no lo tiene lo va redirigir a la pagina index puedes maquillarlo asi mas o menos

Código PHP:
Ver original
  1. if($_SESSION['usuario'])//si esta tiene algún dato
  2. echo "bienvenido";
  3. else
  4. header('Location:index.php?lo=error')

en index haras esto para mostrar el error de logeo

Código PHP:
Ver original
  1. if(isset($_GET['lo'])){
  2. echo "Lo sentimos el espacio donde intentas acceder es restringido, registrate o logeate";
  3. }
  #13 (permalink)  
Antiguo 06/03/2012, 18:45
 
Fecha de Ingreso: septiembre-2010
Mensajes: 17
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: Sesiones en php para login

Pon esto,

session_start();

if(isset($_SESSION['usuario'])){
header('Location: principal.php');
}

Si en tu variable de sesion usuario no hay nada seteado, que te dirija a otra pagina.

Al cerrar sesion tienes que destruir todas las variable de sesion.

Saludos
  #14 (permalink)  
Antiguo 06/03/2012, 19:12
 
Fecha de Ingreso: febrero-2012
Ubicación: En mi propio mundo
Mensajes: 73
Antigüedad: 12 años, 2 meses
Puntos: 23
Respuesta: Sesiones en php para login

No se lo que no entiendes.

Para redirigir una pagina al index usa

Código PHP:
header(‘Location:index.php’
si quieres redirigir a root.php

Código PHP:
header(‘Location:root.php’
si quieres redirigir a invitado.php

Código PHP:
header(‘Location:invitado.php’
Definición de redirigir: Cambiar de rumbo o enviar a otro sitio distinto al que querías.



Teniendo esto BIEN presente y sabiendo que es una sesión y como utilizarla no deberías tener ningún problema.

La logica que tiene que seguir tus páginas root.php y invitado.php es la siguiente:

root.php
-------------------------------------------------------
¿El usuario ha iniciado sesion?
No - > Le enviamos al index
Si - > El usuario es administrador?
Si - > Mostramos el contenido de la página
No - > Le enviamos a invitado.php




invitado.php
-------------------------------------------------------
¿El usuario ha iniciado sesion?
No - > Le enviamos al index
Si - > El usuario es administrador?
Si - > Le enviamos a root.php
No - > Mostramos el contenido de la página
  #15 (permalink)  
Antiguo 08/03/2012, 14:36
 
Fecha de Ingreso: marzo-2012
Mensajes: 16
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Sesiones en php para login

Gracias por vuestra ayuda, cuando tenga tiempo pruebo vuestras sugerencias, llevo muy mal el manejo de sesiones, a ver que aveiguo
Muchas gracias :D

Etiquetas: login, sesiones, sesiones_en_php
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:41.