[Tutorial] Login y registro basico sin unas base de datos

  • 11 Respuestas
  • 11923 Vistas

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado HckDrk

  • *
  • Underc0der
  • Mensajes: 57
  • Actividad:
    0%
  • Reputación 0
  • http://127.0.0.1
    • Ver Perfil
    • HckDrk
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
  1. <?php
  2.  
  3. if($_SESSION['login']!="ok"){ //si la variable de sesion login es diferente a "ok"
  4.  
  5.    header("Location: login.php"); //redirgimos al login.php
  6.  
  7. }else{ //si la variable es igual a "ok" mostramos el contenido..
  8. ?>
  9.  
  10. <html>
  11. <head>
  12. <title>aqui el contenido para usuarios registrados</title>
  13. </head>
  14. <body bgcolor="#000000" text="#FFFFFF">
  15. <p align="right">Bienvenido <b><?php echo $_SESSION['usuario']; ?></b> | <a href="login.php?action=logout">Cerrar Sesion</a></p><hr><br>
  16. <center>
  17. <h1>Aqui iria el contenido para los usuarios registrados</h1>
  18. blablabla xD<br>Visita <a href="http://zone-hack.net" target="_blank">http://zone-hack.net</a>
  19. </body>
  20. </html>
  21. <?php
  22. }
  23. ?>
  24.  

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
  1. <?php
  2.  
  3. //sistema de des/encriptacion por HckDrk, Zone-Hack.Net
  4. function des_encriptacion_zh($action,$cadena){ //primer parametro, encriptacion o desencriptacion. el segundo es la cadena a encriptar o desencriptar
  5.  
  6.    if($action=="encriptacion"){
  7.  
  8.       $valor=file_get_contents("http://tools.zone-hack.net/Apis/Encriptacion/index.php?action=$action&cadena=$cadena");
  9.       $valor=html_entity_decode($valor);
  10.      
  11.    }else if($action=="desencriptacion"){
  12.    
  13.       $valor=file_get_contents("http://tools.zone-hack.net/Apis/Encriptacion/index.php?action=$action&cadena=$cadena");
  14.       $valor=html_entity_decode($valor);
  15.    
  16.    }else{
  17.    
  18.       exit("Error en la funcion </i>des_encriptacion_zh<i>, en el primer parametro solo se premite introducir \"encriptacion\" o \"desencriptacion\" ");
  19.    
  20.    }
  21.  
  22. return $valor;
  23.  
  24. }
  25.  
  26. if($_POST['action']=="enviar"){ //si mandamos el formulario...
  27.  
  28.    if($_POST['usuario']=="" || $_POST['email']=="" || $_POST['pregunta']=="" || $_POST['r_secreta']=="" || $_POST['pass']=="" || $_POST['pass2']==""){ //si los campos estan vacios
  29.  
  30.       echo"<script>alert('debe rellerar todos los campos')</script>"; //mostramos error
  31.  
  32.    }else{ //sino estan vacios...
  33.    
  34.       if($_POST['pass']!=$_POST['pass2']){ //si los password no coinciden
  35.       echo "<script>alert('los password no coinciden!')</script>"; //mostramos mensaje de error
  36.       }else{ //si coinciden..
  37.    
  38.       if(!file_exists("./users/".$_POST['usuario'])){ //si no existe el usuario..
  39.          
  40.          mkdir("users/".$_POST['usuario'], 0777) or die("no se pudo crear el usuario "); //creamos una carpeta
  41.          $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
  42.          fputs($fp,"<?php\n");
  43.          fputs($fp,"\$email=\"".strip_tags($_POST['email'])."\";\n"); //eliminamos etiquetas html, y guardamos el correo
  44.          fputs($fp,"\$pregunta=\"".strip_tags($_POST['pregunta'])."\";\n"); //eliminamos etiquetas html, y guardamos la pregunta para cambiar pass
  45.          fputs($fp,"\$r_secreta=\"".strip_tags($_POST['r_secreta'])."\";\n"); //eliminamos etiquetas html, y guardamos el user
  46.          fputs($fp,"\$user=\"".strip_tags($_POST['usuario'])."\";\n"); //eliminamos etiquetas html, y guardamos el user
  47.          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
  48.          fputs($fp,"?>\n");
  49.          echo "<script>alert('registro completo!')</script>"; //mostramos que todo salio bien
  50.          echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php\">";
  51.      
  52.    
  53.       }else{ //si ya existe el usuario
  54.          echo "<script>alert('ya existe el usuario ".$_POST['usuario']."')</script>"; //mostramos que ya existe el usuario
  55.       }
  56.       }
  57.    }
  58. }
  59.  
  60.  
  61.  
  62. ?>
  63. <html>
  64. <head>
  65. <title>Registro de usuarios sin base de datos</title>
  66. </head>
  67. <body bgcolor="#000000" text="#FFFFFF">
  68.  
  69. <br>
  70. <?php
  71.  
  72. if($_SESSION['login']!="ok"){ //si la variable de sesion es diferente a ok entonces mostraremos el formulario de registro
  73.  
  74. ?>
  75. <center>
  76. <h1>Registro de usuarios sin base de datos</h1>
  77. <table border="0" align="center">
  78. <form method="post" action="registrar.php">
  79. <tr><td>usuario: </td><td><input type="text" name="usuario"></td></tr>
  80. <tr><td>E-mail: </td><td><input type="text" name="email"></td></tr>
  81. <tr><td>password: </td><td><input type="password" name="pass"></td></tr>
  82. <tr><td>repita el pass: </td><td><input type="password" name="pass2"></td></tr>
  83. <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>
  84. <tr><td>respuesta secreta: </td><td><input type="text" name="r_secreta"></td></tr>
  85. <input type="hidden" name="action" value="enviar">
  86. <tr><td colspan="2"><center><input type="submit" value="registrarse!"></center></td></tr>
  87. <tr><td colspan="2"><center><a href="login.php">Iniciar Sesion</a></center></td></tr>
  88. </form>
  89. </table>
  90. <?php
  91. }else{ //si la varieble de sesion es igual a ok entonces redirigimos al index
  92.  
  93. header("Location: index.php");
  94.  
  95. }
  96. ?>
  97. </body>
  98. </html>
  99.  

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
  1. <?php
  2.  
  3. //sistema de des/encriptacion por HckDrk, Zone-Hack.Net
  4. function des_encriptacion_zh($action,$cadena){ //primer parametro, encriptacion o desencriptacion. el segundo es la cadena a encriptar o desencriptar
  5.  
  6.    if($action=="encriptacion"){
  7.  
  8.       $valor=file_get_contents("http://tools.zone-hack.net/Apis/Encriptacion/index.php?action=$action&cadena=$cadena");
  9.       $valor=html_entity_decode($valor);
  10.      
  11.    }else if($action=="desencriptacion"){
  12.    
  13.       $valor=file_get_contents("http://tools.zone-hack.net/Apis/Encriptacion/index.php?action=$action&cadena=$cadena");
  14.       $valor=html_entity_decode($valor);
  15.    
  16.    }else{
  17.    
  18.       exit("Error en la funcion </i>des_encriptacion_zh<i>, en el primer parametro solo se premite introducir \"encriptacion\" o \"desencriptacion\" ");
  19.    
  20.    }
  21.  
  22. return $valor;
  23.  
  24. }
  25.  
  26. if($_SESSION['login']=="ok"){ //si la variable de sesion login es igual a "ok"
  27.  
  28.    if($_GET['action']=="logout"){ //si el action obtenido de la ur es igual a logout destruimos las sessiones
  29.       Session_destroy();
  30.       header("Location: index.php");
  31.       exit();  
  32.    }else{ //sino es ninguna accion redirigimos al index
  33.  
  34.    header("Location: index.php");
  35.    exit();
  36.    }
  37.    
  38. }else{ //sino es igual a ok
  39.  
  40. if($_GET['action']=="remember"){ //si el action tomado del url es igual a remember
  41.  
  42.    
  43.    if($_POST['remember']=="enviar"){ //si enviamos el formulario de recordar pass
  44.       if($_POST['usuario']=="" || $_POST['email']=="" || $_POST['pregunta']=="" || $_POST['r_secreta']==""){ //si los campos estan vacios..
  45.          echo "<script>alert('debe rellenar todos los campos')</script>"; //mostramos mensaje de error
  46.          echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php?action=remember\">"; //y redirigimos de nuevo al formulario
  47.       }else{    //si los campos no estan vacios
  48.          if(file_exists("./users/".$_POST['usuario'])){ //si existe el usuario
  49.             include("./users/".$_POST['usuario']."/datos.php"); //incluimos los datos
  50.                if($email==$_POST['email']){ //si el email del login coincide con el del registro
  51.                   if($pregunta==$_POST['pregunta'] && $r_secreta==$_POST['r_secreta']){ //si la pregunta de seguridad y el email coinciden con los del registro
  52.                      $encabezados = "From: [email protected]\nReply-To: [email protected]\nContent-Type: text/html; charset=iso-8859-1";
  53.                      $mensaje= "tu usuario es: ".$_POST['usuario']."<br><br>Tu password es: ".des_encriptacion_zh("desencriptacion",$pass);
  54.                      if(mail($_POST['email'], "has solicitado tu password",$mensaje, $encabezados)){ //mandamos el email con los datos
  55.                         echo "<script>alert('tu pass ha sido enviado a tu correo')</script>";
  56.                      }else{ //sino se pudo mandar el email
  57.                         echo "<script>alert('tu password es: ".des_encriptacion_zh("desencriptacion",$pass)."')</script>"; //mostramos el password
  58.                         echo "<meta http-equiv=\"refresh\" content=\"0;url=index.php\">"; //redirigimos al index
  59.                      }
  60.                   }else{ //si la pregunta o respuesta secreta no coindicen con los del registro...
  61.                      echo "<script>alert('la pregunta o respuesta secreta no coinciden con la pregunta o respuesta del registro')</script>"; //mostramos error
  62.                      echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php?action=remember\">"; //redirigimos al formulario
  63.                   }
  64.                }else{ //si el email no coindide con el del registro
  65.                   echo"<script>alert('el email no coincide con el del registro')</script>"; //mostramos error
  66.                   echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php?action=remember\">"; //redirigimos al formulario
  67.                }
  68.      
  69.          }else{ //si el usuario no existe..
  70.             echo"<script>alert('el usuario no existe!')</script>"; //mostramos error
  71.             echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php?action=remember\">"; //redirigimos al formulario
  72.          }
  73.       }
  74.    }else{ //sino se ha enviado el formulario de recordar pass mostramos el formulario..
  75. ?>
  76. <html>
  77. <head>
  78. <title>Remeber Password</title>
  79. </head>
  80. <body bgcolor="#000000" text="#FFFFFF">
  81. <center>
  82. <h1>recordar pass</h1>
  83. <table border="0" align="center">
  84. <form method="post" action="login.php?action=remember">
  85. <tr><td>usuario: </td><td><input type="text" name="usuario"></td></tr>
  86. <tr><td>E-mail: </td><td><input type="text" name="email"></td></tr>
  87. <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>
  88. <tr><td>respuesta secreta: </td><td><input type="text" name="r_secreta"></td></tr>
  89. <input type="hidden" name="remember" value="enviar">
  90. <tr><td colspan="2"><center><input type="submit" value="Obtener Password"></center></td></tr>
  91. <tr><td colspan="2"><center><a href="login.php">Iniciar Sesion</a></center></td></tr>
  92. </form>
  93. </table>
  94. </body>
  95. </html>
  96. <?php
  97.    }
  98. }else{ //si el action obtenido de la url no es remember
  99.  
  100.  
  101. if($_POST['action']=="enviar"){ //si enviamos el formulario del login
  102.  
  103.    if($_POST['usuario']=="" || $_POST['pass']==""){ //si los campos estan vacios
  104.       echo"<script>alert('debe introducir todos los datos!')</script>"; //mostramos error
  105.    }else{ //sino estan vacios
  106.  
  107.    if(file_exists("./users/".$_POST['usuario'])){ //si existe el usuario
  108.       include("./users/".$_POST['usuario']."/datos.php"); //incluimos los datos
  109.          if($pass==des_encriptacion_zh("encriptacion",$_POST['pass'])){ //si el pass del login coincide con el del rgistro
  110.             $_SESSION['usuario']=strip_tags($_POST['usuario']); //creamos una variable de sesion con el nombre del usuario
  111.             $_SESSION['login']="ok"; //creamos la variable de sesion login con el valor de ok
  112.             header("Location: index.php"); //redirigimos al index
  113.          }else{ //si no coinciden los pass
  114.             echo"<script>alert('los datos son incorrectos!')</script>"; //mostramos que no son correctos los datos
  115.          }
  116.      
  117.    }else{ //sino existe el usuario
  118.       echo "<script>alert('el usuario no existe!')</script>"; //mostramos que no existe el usuario
  119.    }
  120.    
  121.    }
  122.  
  123. }
  124.  
  125. }
  126.  
  127. }
  128. if($_GET['action']!="remember"){ //si action obtenido de la url es diferente a remember mostramos el formulario de login
  129. ?>
  130. <html>
  131. <head>
  132. <title>Login</title>
  133. </head>
  134. <body bgcolor="#000000" text="#FFFFFF">
  135. <center>
  136. <h1>Login de usuarios</h1>
  137. <table border="0" align="center">
  138. <form method="post" action="">
  139. <tr><td>Usuario:</td><td><input type="text" name="usuario"></td></tr>
  140. <tr><td>Pass:</td><td><input type="password" name="pass"></td></tr>
  141. <input type="hidden" name="action" value="enviar">
  142. <tr><td colspan="2"><center><input type="submit" value="Enviar"></center></td></tr>
  143. </form>
  144. <tr><td><center><a href="registrar.php">Registrarse</a></td><td><center><a href="login.php?action=remember">Olvido su Password?</a></td></tr>
  145. </table>
  146. </body>
  147. </html>
  148. <?php
  149. }
  150. ?>
  151.  
« Última modificación: Marzo 27, 2014, 05:51:55 pm por Expermicid »

Desconectado Xt3mP

  • *
  • Underc0der
  • Mensajes: 432
  • Actividad:
    0%
  • Reputación 0
  • Ellos me están buscando, pero yo los encontraré.
    • MSN Messenger - Xt3mP@h4x0rz.us
    • AOL Instant Messenger - Xt3mP@h4x0rz.us
    • Yahoo Instant Messenger - Xt3mP@h4x0rz.us
    • Ver Perfil
    • Xt3mP
¿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
  1. <?php
  2. fputs($fp,"\$email=\"".strip_tags($_POST['email'])."\";\n");
  3. ?>
  4.  

Mi línea:
Código: PHP
  1. <?php
  2. fputs($fp,'$email="'.strip_tags($_POST['email']).'";'."\n");
  3. ?>
  4.  

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

P.D. Buen método.
Cada vez que me das Karma me motivas

Desconectado d33k40

  • *
  • Underc0der
  • Mensajes: 94
  • Actividad:
    0%
  • Reputación 0
  • En la tierra de los ciegos, el tuerto es el rey.
    • Ver Perfil
    • Email
Buenas, decir que me parece muy bueno el código y que si pudiera usarlo para un proyecto.

un saludo!

Desconectado frank01

  • *
  • Underc0der
  • Mensajes: 1
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
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

Desconectado rabulu

  • *
  • Underc0der
  • Mensajes: 86
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
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

Desconectado Xt3mP

  • *
  • Underc0der
  • Mensajes: 432
  • Actividad:
    0%
  • Reputación 0
  • Ellos me están buscando, pero yo los encontraré.
    • MSN Messenger - Xt3mP@h4x0rz.us
    • AOL Instant Messenger - Xt3mP@h4x0rz.us
    • Yahoo Instant Messenger - Xt3mP@h4x0rz.us
    • Ver Perfil
    • Xt3mP
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.
Cada vez que me das Karma me motivas

Desconectado s00rk

  • *
  • Underc0der
  • Mensajes: 68
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
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.
« Última modificación: Noviembre 19, 2011, 04:43:11 am por s00rk »

Desconectado rabulu

  • *
  • Underc0der
  • Mensajes: 86
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
pues espero ese tuto Xt3mP, si furas tan amable de avisar cuando este listo. gracias.

Desconectado Xt3mP

  • *
  • Underc0der
  • Mensajes: 432
  • Actividad:
    0%
  • Reputación 0
  • Ellos me están buscando, pero yo los encontraré.
    • MSN Messenger - Xt3mP@h4x0rz.us
    • AOL Instant Messenger - Xt3mP@h4x0rz.us
    • Yahoo Instant Messenger - Xt3mP@h4x0rz.us
    • Ver Perfil
    • Xt3mP
Yo te aviso rabulu.
Cada vez que me das Karma me motivas

Desconectado rabulu

  • *
  • Underc0der
  • Mensajes: 86
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
Ok Xt3mP espero......  tic tac tic tac............
saludos.

Desconectado caqca1

  • *
  • Underc0der
  • Mensajes: 32
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
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

Desconectado Xt3mP

  • *
  • Underc0der
  • Mensajes: 432
  • Actividad:
    0%
  • Reputación 0
  • Ellos me están buscando, pero yo los encontraré.
    • MSN Messenger - Xt3mP@h4x0rz.us
    • AOL Instant Messenger - Xt3mP@h4x0rz.us
    • Yahoo Instant Messenger - Xt3mP@h4x0rz.us
    • Ver Perfil
    • Xt3mP
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.
Cada vez que me das Karma me motivas

 

10 Mejores Librerías Para Seguridad En PHP - Seguridad De Datos Desde PHP

Iniciado por graphixx

Respuestas: 0
Vistas: 3527
Último mensaje Enero 23, 2016, 06:03:10 am
por graphixx
[Tutorial] Utilizar el método GET para simplificar páginas [Xt3mP]

Iniciado por Xt3mP

Respuestas: 0
Vistas: 2698
Último mensaje Marzo 19, 2010, 01:15:53 am
por Xt3mP
Metiendo datos en un servidor remoto [ por VenoM ]

Iniciado por ANTRAX

Respuestas: 0
Vistas: 2059
Último mensaje Febrero 24, 2010, 11:28:54 am
por ANTRAX
[Tutorial] Cambiar password aleatoriamente y UPDATE a la DB [Xt3mP]

Iniciado por Xt3mP

Respuestas: 0
Vistas: 2007
Último mensaje Marzo 19, 2010, 01:21:11 am
por Xt3mP
[Tutorial] Utilizando localhost para visualizar .php by Subzer [PHP]

Iniciado por Subzer

Respuestas: 2
Vistas: 2985
Último mensaje Noviembre 14, 2012, 09:57:49 pm
por Subzer