Underc0de

Programación Web => Back-end => Mensaje iniciado por: HckDrk en Mayo 17, 2011, 04:22:15 PM

Título: [Tutorial] Login y registro basico sin unas base de datos
Publicado por: HckDrk en Mayo 17, 2011, 04:22:15 PM
hola!

jojo, aqui uno de mis pequeños aportes xD

les traigo amm un "tutorial" de un login y registro basico sin usar base de datos com mysql (el mas usado en php), oracle o algun otro tipo de DB

espero le entiendan, esta muy comentado, en casi todas las lineas, sino entienden algo solo me dicen! :)

ok, consistira de 3 paginas php, el primero sera el index.php, donde se mostrara el contenido, sino estas logueado nos redireccionara al login.php

Código (php) [Seleccionar]

<?php
session_start
();

if(
$_SESSION['login']!="ok"){ //si la variable de sesion login es diferente a "ok"

header("Location: login.php"); //redirgimos al login.php

}else{ //si la variable es igual a "ok" mostramos el contenido..
?>


<html>
<head>
<title>aqui el contenido para usuarios registrados</title>
</head>
<body bgcolor="#000000" text="#FFFFFF">
<p align="right">Bienvenido <b><?php echo $_SESSION['usuario']; ?></b> | <a href="login.php?action=logout">Cerrar Sesion</a></p><hr><br>
<center>
<h1>Aqui iria el contenido para los usuarios registrados</h1>
blablabla xD<br>Visita <a href="http://zone-hack.net" target="_blank">http://zone-hack.net</a>
</body>
</html>
<?php
}
?>



despues sigue el archivo registrar.php donde crearemos unas carpetas con el nombre del usuario, y ahi adentro crearemos un archivo con los datos del usuario. PD: hay que crear una carpeta que se llame "users" (sin comillas)

Código (php) [Seleccionar]

<?php

//sistema de des/encriptacion por HckDrk, Zone-Hack.Net
function des_encriptacion_zh($action,$cadena){ //primer parametro, encriptacion o desencriptacion. el segundo es la cadena a encriptar o desencriptar

if($action=="encriptacion"){

$valor=file_get_contents("http://tools.zone-hack.net/Apis/Encriptacion/index.php?action=$action&cadena=$cadena");
$valor=html_entity_decode($valor);

}else if($action=="desencriptacion"){

$valor=file_get_contents("http://tools.zone-hack.net/Apis/Encriptacion/index.php?action=$action&cadena=$cadena");
$valor=html_entity_decode($valor);

}else{

exit("Error en la funcion </i>des_encriptacion_zh<i>, en el primer parametro solo se premite introducir \"encriptacion\" o \"desencriptacion\" ");

}

return 
$valor;

}

if(
$_POST['action']=="enviar"){ //si mandamos el formulario...

if($_POST['usuario']=="" || $_POST['email']=="" || $_POST['pregunta']=="" || $_POST['r_secreta']=="" || $_POST['pass']=="" || $_POST['pass2']==""){ //si los campos estan vacios

echo"<script>alert('debe rellerar todos los campos')</script>"//mostramos error

}else{ //sino estan vacios...

if($_POST['pass']!=$_POST['pass2']){ //si los password no coinciden
echo "<script>alert('los password no coinciden!')</script>"//mostramos mensaje de error
}else{ //si coinciden..

if(!file_exists("./users/".$_POST['usuario'])){ //si no existe el usuario..

mkdir("users/".$_POST['usuario'], 0777) or die("no se pudo crear el usuario "); //creamos una carpeta
$fp=fopen("users/".$_POST['usuario']."/datos.php","w+") or die("no se pudo crear el usuarioo"); //creamos el archivo datos.php donde se guardara su user y su pass
fputs($fp,"<?php\n");
fputs($fp,"\$email=\"".strip_tags($_POST['email'])."\";\n"); //eliminamos etiquetas html, y guardamos el correo
fputs($fp,"\$pregunta=\"".strip_tags($_POST['pregunta'])."\";\n"); //eliminamos etiquetas html, y guardamos la pregunta para cambiar pass
fputs($fp,"\$r_secreta=\"".strip_tags($_POST['r_secreta'])."\";\n"); //eliminamos etiquetas html, y guardamos el user
fputs($fp,"\$user=\"".strip_tags($_POST['usuario'])."\";\n"); //eliminamos etiquetas html, y guardamos el user
fputs($fp,"\$pass=\"".des_encriptacion_zh("encriptacion",strip_tags($_POST['pass']))."\";\n"); //eliminamos etiquetas html, encriptamos con nuestro propio sistema de encriptamiento y guardamos el pass
fputs($fp,"?>
\n");
echo "<script>alert('registro completo!')</script>"; //mostramos que todo salio bien
echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php\">";


}else{ //si ya existe el usuario
echo "<script>alert('ya existe el usuario ".$_POST['usuario']."')</script>"; //mostramos que ya existe el usuario
}
}
}
}



?>
<html>
<head>
<title>Registro de usuarios sin base de datos</title>
</head>
<body bgcolor="#000000" text="#FFFFFF">

<br>
<?php

if($_SESSION['login']!="ok"){ //si la variable de sesion es diferente a ok entonces mostraremos el formulario de registro

?>

<center>
<h1>Registro de usuarios sin base de datos</h1>
<table border="0" align="center">
<form method="post" action="registrar.php">
<tr><td>usuario: </td><td><input type="text" name="usuario"></td></tr>
<tr><td>E-mail: </td><td><input type="text" name="email"></td></tr>
<tr><td>password: </td><td><input type="password" name="pass"></td></tr>
<tr><td>repita el pass: </td><td><input type="password" name="pass2"></td></tr>
<tr><td>pregunta seguridad: (<a href="javascript:alert('se te preguntara esta pregunta y su respuesta en caso de que olvides tu password')">?</a>)</td><td><select name="pregunta"><option value="">selecciona una pregunta</option><option value="mascota favorita">mascota favorita</option><option value="mejor amigo">mejor amigo</option><option value="pelicula favorita">pelicula favorita</option></select></td></tr>
<tr><td>respuesta secreta: </td><td><input type="text" name="r_secreta"></td></tr>
<input type="hidden" name="action" value="enviar">
<tr><td colspan="2"><center><input type="submit" value="registrarse!"></center></td></tr>
<tr><td colspan="2"><center><a href="login.php">Iniciar Sesion</a></center></td></tr>
</form>
</table>
<?php
}else{ //si la varieble de sesion es igual a ok entonces redirigimos al index

header("Location: index.php");

}
?>

</body>
</html>


y por ultimo el login.php donde crearemos variables de sesion para poder ver el contenido del index, tambien aqui podremos recuperar el password, pos si se nos olvido..

Código (php) [Seleccionar]

<?php
session_start
();

//sistema de des/encriptacion por HckDrk, Zone-Hack.Net
function des_encriptacion_zh($action,$cadena){ //primer parametro, encriptacion o desencriptacion. el segundo es la cadena a encriptar o desencriptar

if($action=="encriptacion"){

$valor=file_get_contents("http://tools.zone-hack.net/Apis/Encriptacion/index.php?action=$action&cadena=$cadena");
$valor=html_entity_decode($valor);

}else if($action=="desencriptacion"){

$valor=file_get_contents("http://tools.zone-hack.net/Apis/Encriptacion/index.php?action=$action&cadena=$cadena");
$valor=html_entity_decode($valor);

}else{

exit("Error en la funcion </i>des_encriptacion_zh<i>, en el primer parametro solo se premite introducir \"encriptacion\" o \"desencriptacion\" ");

}

return 
$valor;

}

if(
$_SESSION['login']=="ok"){ //si la variable de sesion login es igual a "ok"

if($_GET['action']=="logout"){ //si el action obtenido de la ur es igual a logout destruimos las sessiones
Session_destroy();
header("Location: index.php");
exit();
}else{ //sino es ninguna accion redirigimos al index

header("Location: index.php");
exit();
}

}else{ 
//sino es igual a ok

if($_GET['action']=="remember"){ //si el action tomado del url es igual a remember 


if($_POST['remember']=="enviar"){ //si enviamos el formulario de recordar pass
if($_POST['usuario']=="" || $_POST['email']=="" || $_POST['pregunta']=="" || $_POST['r_secreta']==""){ //si los campos estan vacios..
echo "<script>alert('debe rellenar todos los campos')</script>"//mostramos mensaje de error
echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php?action=remember\">"//y redirigimos de nuevo al formulario
}else{  //si los campos no estan vacios
if(file_exists("./users/".$_POST['usuario'])){ //si existe el usuario
include("./users/".$_POST['usuario']."/datos.php"); //incluimos los datos
if($email==$_POST['email']){ //si el email del login coincide con el del registro
if($pregunta==$_POST['pregunta'] && $r_secreta==$_POST['r_secreta']){ //si la pregunta de seguridad y el email coinciden con los del registro
$encabezados "From: [email protected]\nReply-To: [email protected]\nContent-Type: text/html; charset=iso-8859-1";
$mensaje"tu usuario es: ".$_POST['usuario']."<br><br>Tu password es: ".des_encriptacion_zh("desencriptacion",$pass);
if(mail($_POST['email'], "has solicitado tu password",$mensaje$encabezados)){ //mandamos el email con los datos
echo "<script>alert('tu pass ha sido enviado a tu correo')</script>";
}else{ //sino se pudo mandar el email
echo "<script>alert('tu password es: ".des_encriptacion_zh("desencriptacion",$pass)."')</script>"//mostramos el password
echo "<meta http-equiv=\"refresh\" content=\"0;url=index.php\">"//redirigimos al index
}
}else{ //si la pregunta o respuesta secreta no coindicen con los del registro...
echo "<script>alert('la pregunta o respuesta secreta no coinciden con la pregunta o respuesta del registro')</script>"//mostramos error
echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php?action=remember\">"//redirigimos al formulario
}
}else{ //si el email no coindide con el del registro
echo"<script>alert('el email no coincide con el del registro')</script>"//mostramos error
echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php?action=remember\">"//redirigimos al formulario
}

}else{ //si el usuario no existe..
echo"<script>alert('el usuario no existe!')</script>"//mostramos error
echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php?action=remember\">"//redirigimos al formulario
}
}
}else{ //sino se ha enviado el formulario de recordar pass mostramos el formulario..
?>

<html>
<head>
<title>Remeber Password</title>
</head>
<body bgcolor="#000000" text="#FFFFFF">
<center>
<h1>recordar pass</h1>
<table border="0" align="center">
<form method="post" action="login.php?action=remember">
<tr><td>usuario: </td><td><input type="text" name="usuario"></td></tr>
<tr><td>E-mail: </td><td><input type="text" name="email"></td></tr>
<tr><td>pregunta seguridad: (<a href="javascript:alert('la pregunta que elegiste cuando te registraste')">?</a>)</td><td><select name="pregunta"><option value="">selecciona una pregunta</option><option value="mascota favorita">mascota favorita</option><option value="mejor amigo">mejor amigo</option><option value="pelicula favorita">pelicula favorita</option></select></td></tr>
<tr><td>respuesta secreta: </td><td><input type="text" name="r_secreta"></td></tr>
<input type="hidden" name="remember" value="enviar">
<tr><td colspan="2"><center><input type="submit" value="Obtener Password"></center></td></tr>
<tr><td colspan="2"><center><a href="login.php">Iniciar Sesion</a></center></td></tr>
</form>
</table>
</body>
</html>
<?php
}
}else{ 
//si el action obtenido de la url no es remember


if($_POST['action']=="enviar"){ //si enviamos el formulario del login

if($_POST['usuario']=="" || $_POST['pass']==""){ //si los campos estan vacios
echo"<script>alert('debe introducir todos los datos!')</script>"//mostramos error
}else{ //sino estan vacios

if(file_exists("./users/".$_POST['usuario'])){ //si existe el usuario
include("./users/".$_POST['usuario']."/datos.php"); //incluimos los datos
if($pass==des_encriptacion_zh("encriptacion",$_POST['pass'])){ //si el pass del login coincide con el del rgistro
$_SESSION['usuario']=strip_tags($_POST['usuario']); //creamos una variable de sesion con el nombre del usuario
$_SESSION['login']="ok"//creamos la variable de sesion login con el valor de ok
header("Location: index.php"); //redirigimos al index
}else{ //si no coinciden los pass
echo"<script>alert('los datos son incorrectos!')</script>"//mostramos que no son correctos los datos
}

}else{ //sino existe el usuario
echo "<script>alert('el usuario no existe!')</script>"//mostramos que no existe el usuario
}

}

}

}

}
if(
$_GET['action']!="remember"){ //si action obtenido de la url es diferente a remember mostramos el formulario de login
?>

<html>
<head>
<title>Login</title>
</head>
<body bgcolor="#000000" text="#FFFFFF">
<center>
<h1>Login de usuarios</h1>
<table border="0" align="center">
<form method="post" action="">
<tr><td>Usuario:</td><td><input type="text" name="usuario"></td></tr>
<tr><td>Pass:</td><td><input type="password" name="pass"></td></tr>
<input type="hidden" name="action" value="enviar">
<tr><td colspan="2"><center><input type="submit" value="Enviar"></center></td></tr>
</form>
<tr><td><center><a href="registrar.php">Registrarse</a></td><td><center><a href="login.php?action=remember">Olvido su Password?</a></td></tr>
</table>
</body>
</html>
<?php
}
?>

Título: Re:[tutorial] login y registro basico sin unas base de datos
Publicado por: Xt3mP en Mayo 17, 2011, 07:49:46 PM
¿Es seguro?, ¿Qué pasa si en vez de meter etiquetas HTML y suponiendo que tienes las magic_quotes() OFF pongo ' o "? tu datos.php pasaría a verse porque daría un error de sintáxis, por lo demás esta muy bueno, te recomiendo que cuando utilizes solo string utilizes comillas simples para evitar poner la diagonal invertida:

Tu línea:
Código (php) [Seleccionar]

<?php
fputs
($fp,"\$email=\"".strip_tags($_POST['email'])."\";\n");
?>



Mi línea:
Código (php) [Seleccionar]

<?php
fputs
($fp,'$email="'.strip_tags($_POST['email']).'";'."\n");
?>



Solo uso comillas dobles en el \n ya que las comillas simples no lo procesan, saludos.

P.D. Buen método.
Título: Re:[tutorial] login y registro basico sin unas base de datos
Publicado por: d33k40 en Mayo 17, 2011, 08:24:41 PM
Buenas, decir que me parece muy bueno el código y que si pudiera usarlo para un proyecto.

un saludo!
Título: Re:[tutorial] login y registro basico sin unas base de datos
Publicado por: frank01 en Noviembre 18, 2011, 01:50:32 PM
saludos soy nuevo en e foro y en programacion, probe el cdigo y me aparecen los siguientes errores, Notice: Undefined index: login , Notice: Undefined index: action
uso windows wampserver y visualizo el codigo en locahost. ayuda por favor y gracias
Título: Re:[tutorial] login y registro basico sin unas base de datos
Publicado por: rabulu en Noviembre 18, 2011, 11:50:20 PM
Me parece muy buen post, solo tengo una pregunta según lo que vi del código el mismo código crea la carpeta, pero y como o donde le ponemos el usuario y la contraseña, la duda es en la linea 40 y 41 de registrar.php, en caso de ser así, y si no pues de plano no entendí nada, si me pudieras echar una mano HckDrk. gracias. ;D
Título: Re:[tutorial] login y registro basico sin unas base de datos
Publicado por: Xt3mP en Noviembre 19, 2011, 02:04:14 AM
La verdad (sin ofender a HckDrk) no recomiendo hacer un login y registro de esta manera; en unos momentos trataré de subir uno más actualizado y explicando batantes cosas.

Saludos.
Título: Re:[tutorial] login y registro basico sin unas base de datos
Publicado por: s00rk en Noviembre 19, 2011, 04:40:32 AM
Para esto prefiero hacer una clase, luego crear el objeto y de ahi crear una de-serializacion segun lo que ocupe y ya. (Esto en PHP nunca lo he hecho, pero he leido que tambien existe tal funcion y si se puede tratar como lo he hecho en C# es posible y bastante sencillo)

O tambien hacerlo directamente todo en un xml.
Título: Re:[tutorial] login y registro basico sin unas base de datos
Publicado por: rabulu en Noviembre 19, 2011, 06:36:15 PM
pues espero ese tuto Xt3mP, si furas tan amable de avisar cuando este listo. gracias.
Título: Re:[tutorial] login y registro basico sin unas base de datos
Publicado por: Xt3mP en Noviembre 19, 2011, 07:06:23 PM
Yo te aviso rabulu.
Título: Re:[tutorial] login y registro basico sin unas base de datos
Publicado por: rabulu en Noviembre 21, 2011, 01:55:18 AM
Ok Xt3mP espero......  tic tac tic tac............
saludos.
Título: Re:[tutorial] login y registro basico sin unas base de datos
Publicado por: caqca1 en Noviembre 21, 2011, 03:16:05 AM
concuerdo con Xt3mP
nadie con experiencia usaria ese codigo, pero es un claro ejemplo de como manejar las sesiones
PD: las contraseñas no son necesesarias, solo son medidas de seguridad para evitar el rovo de identidad
Título: Re:[tutorial] login y registro basico sin unas base de datos
Publicado por: Xt3mP en Noviembre 21, 2011, 07:37:49 AM
Así es, aunque no recomiendo hacer login sin base de datos; te expones más en términos de seguridad.

En cuanto logre montar videos HD haré un tutorial de como crear un login básico con sesiones + DB.

P.D. Aprovecho el post para saber si alguien sabe como puesto que cambie de camtasia y de resolución... y ver videos pantalla completa no me favorece porque el código no se aprecia bien.