¡Aprende a crear un sistema de inicio de sesión en PHP! En este tutorial, te guiaré a través de los pasos esenciales para establecer una funcionalidad de inicio de sesión en tus aplicaciones web. Aunque te proporcionaré un ejemplo simple para comenzar, es crucial recordar que en entornos de aplicaciones reales, la seguridad y las mejores prácticas son fundamentales.
1.Configuración de la base de datos y la conexion: Antes que nada, asegúrate de tener una base de datos configurada. Puedes usar MySQL, PostgreSQL, SQLite o cualquier otro sistema de gestión de bases de datos. Crea una tabla en tu base de datos para almacenar la información de usuario, con al menos campos para el nombre de usuario y la contraseña. Aquí hay un ejemplo de cómo crear una tabla en MySQL:
CREATE TABLE usuario ( id_usuario SERIAL PRIMARY KEY, username VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL );
<?php class Connection { public $host = 'localhost'; public $dbname = 'nombre_base_de_datos'; public $port = '5432'; public $user = 'postgres'; public $password = '$password'; public $driver = 'pgsql'; public $connect; public static function getConnection() { try { $connection = new Connection(); // conexion a PostgreSQL con PDO $connection->connect = new PDO("{$connection->driver}:host={$connection->host};port={$connection->port};dbname={$connection->dbname}", $connection->user, $connection->password); $connection->connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $connection->connect; // echo 'conexion exitosa'; } catch (PDOException $e) { echo 'Error: '. $e->getMessage(); } } }
2. Formulario de inicio de sesión (login.php): Crea un formulario HTML en un archivo login.php donde los usuarios puedan ingresar su nombre de usuario y contraseña. Aquí tienes un ejemplo básico:
<!DOCTYPE html> <html> <head> <title>Iniciar sesión</title> </head> <body> <h2>Iniciar sesión</h2> <form action="" method="POST"> <label for="username">Nombre de usuario:</label> <input type="text" name="username" required><br> <label for="password">Contraseña:</label> <input type="password" name="password" required><br> <button type="submit">Iniciar sesión</button> </form> </body> </html>
3. Script PHP para el inicio de sesión (user_session.php y user.php): Crea un script PHP para procesar el formulario de inicio de sesión.
En este script, verificarás si el nombre de usuario y la contraseña proporcionados coinciden con los registros en la base de datos. Si coinciden, el usuario inicia sesión.
<?php // Se requieres conexion a la base de datos require './connection.php'; // hereda la clase de Connection class User extends Connection{ private $nombre; private $username; public function userExists($user, $pass) { // encripta la clave con md5 $md5pass = md5($pass); $sql = 'SELECT * FROM usuario WHERE username=:user AND password=:pass'; $declaracion = $this->getConnection()->prepare($sql); $declaracion->bindParam(':user', $user); $declaracion->bindParam(':pass', $md5pass); $declaracion->execute(); if($declaracion->rowCount()){ return true; }else{ return false; } } public function setUser($user) { $sql = 'SELECT * FROM usuario WHERE username=:user'; $declaracion = $this->getConnection()->prepare($sql); $declaracion->bindParam(':user', $user); $declaracion->execute(); foreach ($declaracion as $currentUser) { $this->nombre = $currentUser['nombre']; $this->username = $currentUser['username']; } } public function getNombre(){ return $this->nombre; } public function getUserName(){ return $this->username; } }
En este script se iniciara sesión y cerrará sesión, ademas de obtener datos del usuario:
<?php class UserSession { public function __construct(){ session_start(); } public function setCurrentUser($user){ $_SESSION['user'] = $user; } public function getCurrentUser(){ return $_SESSION['user']; } public function closeSession(){ session_unset(); session_destroy(); } }
4. Página de bienvenida (home.php): Si el inicio de sesión es exitoso, el usuario accederá a la vista que solo un usuario logeado tiene acceso:
<!DOCTYPE html> <html lang="es"> <head> <link rel="stylesheet" href="./style.css"> <title><?php echo $title; ?></title> </head> <body> // contenido <div> <a href="./logout.php">cerrar sesion</a> </div> </body> </html>
5. Página principal (index.php): pagina principal donde se verifica si el usuario ha iniciado sesion, sino no ha iniciado sesion se le mostrará el login.php , si ha inciado sesion se me mostrará home.php
<?php require './user.php'; require './user_session.php'; $userSession = new UserSession(); $user = new User(); if (isset($_SESSION['user'])) { // Hay sesión $user->setUser($userSession->getCurrentUser()); require './home.php'; } else if (isset($_POST['username']) && isset($_POST['password'])) { // Inicia sesion, validación de login $userForm = $_POST['username']; $passForm = $_POST['password']; if ($user->userExists($userForm, $passForm)) { // usuario validado $userSession->setCurrentUser($userForm); $user->setUser($userForm); require './home.php'; } else { // Nombre de usuario y/o password incorrecto $errorLogin = "Nombre de usuario y/o password es incorrecto"; require './login.php'; } } else { // No hay sesion, Mostrar login require './login.php'; } ?>
6. Cerrar sesión (logout.php): Proporciona un script para cerrar la sesión del usuario cuando sea necesario. Esto destruirá la sesión actual.
<?php require './user_session.php'; $userSession = new UserSession(); $userSession->closeSession(); header('location: ./index.php');