xXalantalmaxX
Usuario (Perú)
Hola a todos, hace poco hice un sistema de usuarios y lo publiqué en un foro que modero y ahora vengo y lo comparto también por acá, por si a alguien le sirve, no usa sesiones sino que utiliza cookies. El primer paso es crear una tabla en la base de datos en la que almacenaremos los usuarios que se registren. Vayan a su phpmyadmin y creen una base de datos llamada "tutorial" (puede llamarse de otra forma) y ejecuten esta consulta dentro de la pestaña SQL: http://tny.cz/2a8b8025 Una vez creada, procederemos a hacer el archivo de configuración en el que pondremos nuestros datos del host. Creen un archivo llamado config.php y pongan lo siguiente: http://tny.cz/3434d1c9 Les explicaré un poco lo de arriba, lo de error_reporting es útil si estamos en localhost para que no muestre Notices que sinceramente no sirven de mucho. Dentro de la variable $server coloquen el servidor de su host (casi siempre es localhost), en password coloquen la contraseña de su db, en usuario coloquen el usuario de su db y en $database coloquen el nombre de su base de datos. Todo lo demás no lo toquen. Guarden el archivo 2) Crear un archivo llamado sesion.php y colocar lo siguiente: http://tny.cz/a00e6602 La variable separar usa explode para separar el contenido de la cookie llamada sesion, en el que se divide id#contraseña, en la segunda línea comprobamos que la cookie y el usuario del contenido de la cookie también, en la tercera asociamos toda la información de la consulta de la segunda línea para obtener los datos del usuario que esté logueado, en la 4º linea evitamos spoofing en la ip del visitante y en la 5º actualizamos los datos del usuario poniendo la ip actual dentro de la tabla ip, en la última linea, en caso de no existir una cookie o que los datos sean incorrectos, eliminamos la cookie. 3) Crear un archivo llamado login.php y colocar lo siguiente: http://tny.cz/3fc6aba8 Con if($_POST) comprobamos que se hayan envíado datos via post, con las otras 2 líneas comprobamos que se haya ingresado algo en usuario y contraseña. En la 4º línea hacemos una consulta para comprobar que el usuario con el nick ingresado exista y si existe, obtener los datos del mismo. El setcookie(); sirve para insertar la cookie de sesión en la PC del usuario, en la penúltima línea actualizamos la IP del visitante guardada en la base de datos, y en la última línea redireccionamos al usuario al index de la web en caso de que los datos estén todos correctos. 4) Crear un archivo llamado registro.php y colocar lo siguiente: http://tny.cz/4343ee75 Comprobamos que se hayan envíado datos por POST y que se hayan ingresado todos los datos, con una pequeña expresión regular hecha con preg_match comprobamos que el nick no contenga carácteres especiales y tenga un tamaño específico. Comprobamos que el tamaño de la contraseña sea el correcto, que el email también sea correcto con un filtro (filter_validate_email), con ctype_digit comprobamos que los valores ingresados en el campo telefóno sean numéricos y que no sobrepasen un determinado tamaño. Por último insertamos todos los datos ingresados dentro de la tabla usuarios que acabamos de crear. 5) Crear un archivo llamado index.php y colocar lo siguiente: http://tny.cz/ed9c8551 Incluimos los datos importantes (conexión a la db y archivo de sesión de usuario), comprobamos que exista una sesión, en caso de no existir mostrar el mensaje para llevar al registro o login. Si existe una sesión, se muestran los datos del usuario logueado: 6) Crear un archivo llamado logout.php e ingresar lo siguiente: http://tny.cz/ca36045a Incluímos lo más importante, comprobamos que el usuario esté logueado y en caso de estarlo destruir la cookie y redireccionar al index. 7) Crear un archivo llamado perfil.php e ingresar lo siguiente: http://tny.cz/f4c8a3c2 Incluímos el archivo de conexión a la base de datos, si no se ha recibido el nick mostrar un mensaje de error; comprobar que el nick ingresado en la URL exista y si existe se recuperan los datos de ese usuario con mysql_fetch_row(); que retorna una asociación numérica de los datos comenzando con 0. 8) Crear un archivo .htaccess (sin extensión) para poder acceder a los perfiles de esta forma: perfil/nick y agregar lo siguiente: RewriteEngine On RewriteRule ^(.*)/$ /$1 RewriteRule ^perfil/([a-z0-9_-]+)$ perfil.php?user=$1 [NC,L] En caso de querer agregar una nueva función, siempre incluir el config.php ya que contiene lo más importante. Por cierto, mysql_real_escape_string(); es para evitar inyección SQL y htmlspecialchars(); es para evitar ataques XSS. Como pueden ver es todo bastante simple, es más para que lo puedan usar de base y cambiarle el diseño y ponerle algo mejor, entre otras cosas. Tuve que poner todo en pastes porque taringa quita las barritas del código ._. Link del topic, también hay un adjunto con todo lo de arriba: http://www.phpost.net/foro/topic/16543-sistema-de-login-hecho-por-mi-en-php-mysql/
