entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

-1voto

istrucciones a seguir para un sistema de usuarios eficiente

hola colegas no se como llevar a cabo mi idea necesito crear un sistema de usuarios que sea capaz de restringir el acceso a paginas privadas que solo a los usuarios registrados podran ver, para empezar en mi pagina principal esta mi formulario de acceso que es publico, cuando se acceda esto deberia redigir a una pagina privada que contiene una imagen que deberia ser accesible solo para los usuarios registrados.
por el momento me falta implementar la funcion que permita al usuario cerrar la sesion en cualquier momento esto se haria con un boton luego hace falta la funcion que no permita entrar a la pagina privada desde la url a un visitante
adicionalmente que la sesion perdure por un buen rato por lo menos una hora y que se pueda navegar por todas las paginas del sitio.


<body style="background-color: darkblue; color:skyblue; font-weight: bold;">
  <form method="post" action="../model/verificador.php" enctype="multipart/form-data">

    <input type="text"     name="uname">
    <input type="password" name="password">
    <input type="submit"   name="login" value="login"><br>

  </form>
</body>

este guion se encarga de verificar la existencia del usuario y devolver los datos de registro que son el username y el correo.

<?php

session_start();

$uname = $_POST['uname'];
$pw = $_POST['password'];
// $email = $_POST['uname'];

require("conexion.php");

$comando = "SELECT * FROM users WHERE name ='$uname' AND password ='$pw' ";

$consulta = mysql_query($comando) or die ("Error en la query: ".mysql_error());
$fila = mysql_fetch_array($consulta) or die ("Erro en la consulta:".mysql_error());

// if($consulta)
// {
    echo "verifica realizada"."<br>";

    $_SESSION ['id']    =  $fila ['id'];
    $_SESSION ['name']  =  $fila ['name'];
    $_SESSION ['email'] =  $fila ['email'];

    echo "username: ".$_SESSION['name']."<br>";
    echo "email: ".$_SESSION['email']."<br>";

// }

mysql_close($conex);

?>

pagina privada

<html>
    <body>
        <h1>pagina privada</h1>
    </body>
</html>

carlossevi comentado Feb 28

Te ha faltado poner cuál es la pregunta o el error a solucionar, aunque desde ya te puedo decir que no estás controlando si la consulta devuelve resultados.

Puntos a mejorar: proteger la consulta contra injección de SQL y abandonar la función mysql_query, que es obsoleta y debería ser reemplazada por MySQLi o PDO_MySQL.

steven comentado Feb 28

gracias por tu consejo @carlossevi pero por ahora no domino la opp y no quiero complicarme la vida con eso porque no lo veo necesario para un miniproyecto en local, de todas maneras lo estoy estudiando para emplearlo mas adelante.

retomando el argumento necesito que mi script se pueda mostrar solo a los usuarios registrados, acabo de hacer algunas modificaciones y esto es el resultado

<body style="background-color: darkblue; color:skyblue; font-weight: bold;">
  <form method="post" action="../model/verificador.php" enctype="multipart/form-data">

    <input type="text" name="uname">
    <input type="password" name="password">
    <input type="submit" name="login" value="login"><br>

  </form>
</body>

este script verifica la exisencia del usuario y en caso positivo lo redigirie a su area personal osea perfil_usuario donde se le mostrara una pagina privada.

<?php

session_start();

$uname = $_POST['uname'];
$pw = $_POST['password'];
// $email = $_POST['uname'];

require("conexion.php");

$comando = "SELECT * FROM users WHERE name ='$uname' AND password ='$pw' ";

$consulta = mysql_query($comando) or die ("Error en la query: ".mysql_error());
$fila = mysql_fetch_array($consulta) or die ("Erro en la consulta:".mysql_error());

if($consulta)
{
    echo "verifica realizada"."<br>";

    $_SESSION ['id']    =  $fila ['id'];
    $_SESSION ['name']  =  $fila ['name'];
    $_SESSION ['email'] =  $fila ['email'];

    echo "username: ".$_SESSION['name']."<br>";
    echo "email: ".$_SESSION['email']."<br>";
    header("location:perfil_usuario.php");

}

mysql_close($conex);

?>

esto es la pagina reservada para todos los usarios registrados, deberia de ser invisible para los visitantes acceder por medio del url, la pagina que muestra esta entre dentro del include.

<?php
session_start();
require("conexion.php");
if (!$_SESSION){  header("location:inicio.php");}

print "<h2>perfil privado</h2><br>";

echo $_SESSION['name']."<br>";
echo $_SESSION['email']."<br>";

include("../views/intro.php");

?>
<a href="logout.php">cerrar sesion</a>

por ultimo esta el script que se encarga de destruir la sesion y hacer la redireccion a la pagina principal

<?php
session_start();

if ($_SESSION['name'])
{
  session_destroy();
  header("location:inicio.php");
}

?>

nota: necesito solo que mi pagina privada intro.php no sea accesible por medio del url. si hay algo en el codigo que se pueda optimizar en el sentido de hacer mas compacto el codigo no duden en comentarlo
acepto cualquier tipo de sugerencias

carlossevi comentado Feb 28

Te ha faltado poner cuál es la pregunta o el error a solucionar. ¿Qué es lo que no está funcionando como debe?

steven comentado Feb 28

lo que no se dede poder hacer es mostrar la pagina reservada intro.php a los visitantes es decir que si alguien por la url intente acceder sin haberse logeado lo redigire a la pagina principal.
debe ser similar al comportamiento de verificacion que si no existe el usuario lo manda a la pagina inicio. algo parecido a la accion de crear una pregunta en esta pagina si por ejemplo no soy un usuario no puedo acceder a la siguiente url
http://www.entredesarrolladores.com/ask?cat=1 y no puedo postear preguntas

1 Respuesta

2votos

carlossevi Puntos59880

En todas las páginas que desees proteger deberías incluir al principio un fragmento similar a:

if(!isset($_SESSION['nombre'])) {
    header("location:inicio.php");
}

Puedes incluirlo manualmente pero lo mejor es que lo incluyas desde un archivo php referenciado en todas ellas, por ejemplo:

include('comprobar_sesion.php');

Eso comprueba si está fijado el "nombre" de la variable $_SESSION, y si la variable no existe redirige al usuario a la página de inicio.php donde presumiblemente tendrás un formulario que permite al usuario hacer login.

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Actividad Reciente

¿Eres Usuario Apple?

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta