Desarrollo en PHP - ADSI
Rodrigo Aranda Fernández
Conceptos básicos de las sesiones en PHP
Las sesiones son un mecanismo para almacenar información en el servidor que
permanecerá entre un acceso y otro.
Al conectarse un usuario se le asigna un identificador de sesión con el que se
asociará la información.
Cuando se inicia una sesión en PHP comprueba automáticamente si ya existía
alguna, en el caso que exista recupera toda la información de la sesión.
A la información que se almacena en una sesión se le llama variable de sesión.
Se crea una sesión con la función session_start().
El vector $_SESSION almacena las variables de sesión.
Para destruir los datos asociados a una sesión se utiliza la
función session_destoy().
Crear sesión
$_SESSION['username'] = $results['username']; header('location: paginas/home.php '); exit;
Recuperar Sesión
session_start(); if(isset( $_SESSION['username'] )){ echo 'Bienvenido '.$_SESSION['username'];
se muestra el menú }else{ Redireccionar a la página de logueo
}
Logout
session_start(); unset($_SESSION["nombre_usuario"]); unset($_SESSION["nombre_cliente"]); session_destroy(); header("Location: index.php"); exit;
Desarrollo en PHP - ADSI
Rodrigo Aranda Fernández
$_SESSION = array(); // para limpiar todas las variables de una vez
Ejemplo
Clase para conectarse a la BD
<?php class Conexion { private static $instancia; private $dbh; private function __construct() { try { $this->dbh = new PDO('mysql:host=localhost;dbname=usuarios', 'root', ''); $this->dbh->exec("SET CHARACTER SET utf8"); } catch (PDOException $e) { print "Error!: " . $e->getMessage(); die(); } } public function prepare($sql) { return $this->dbh->prepare($sql); } public static function singletonConexion() { if (!isset(self::$instancia)) { $miclase = __CLASS__; self::$instancia = new $miclase; } return self::$instancia; } // Evita que el objeto se pueda clonar public function __clone()
Desarrollo en PHP - ADSI
Rodrigo Aranda Fernández
{ trigger_error('La clonación de este objeto no está permitida', E_USER_ERROR); } }
Tabla a utilizar
CREATE TABLE IF NOT EXISTS 'users'( id int not null primary key auto_increment, username varchar(100) not null, password varchar(100) not null );
En la clase Login (Esto se puede realizar en e DAO)
require_once 'conexion/Conexion.php'; session_start(); class Login { private static $instancia; private $dbh; private function __construct() { $this->dbh = Conexion::singletonConexion(); } public static function singletonLogin() { if (!isset(self::$instancia)) { $miclase = __CLASS__; self::$instancia = new $miclase; } return self::$instancia; } public function validarUsuario($nick,$password) { try { $sql = "SELECT * from users WHERE username = ? AND password = ?"; $query = $this->dbh->prepare($sql);
Desarrollo en PHP - ADSI
Rodrigo Aranda Fernández
$query->bindParam(1,$nick); $query->bindParam(2,$password); $query->execute(); $this->dbh = null; //si existe el usuario if($query->rowCount() == 1) { $fila = $query->fetch(); $_SESSION['nombre'] = $fila['nombre']; return TRUE; } }catch(PDOException $e){ print "Error!: " . $e->getMessage(); } } // Evita que el objeto se pueda clonar public function __clone() { trigger_error('La clonación de este objeto no está permitida', E_USER_ERROR); } }
Formulario
<div class="content"> <div class="caja_login"> <h2>Login en PHP</h2> <form class="form" action="Login.php" method="post"> <label>Username</label> <input type="text" name="nick" required="true" placeholder="Introduce tu usuario" /> <label>Password</label> <input type="password" name="password" required="true" placeholder="Introduce tu password" /> <input type="submit" value=" Ingresar" /> </form> </div> </div>
Desarrollo en PHP - ADSI
Rodrigo Aranda Fernández
En el controlador:
require_once 'Login.php'; //accedemos al método singleton que es quién crea la instancia //de nuestra clase y así podemos acceder sin necesidad de //crear nuevas instancias, lo que ahorra consumo de recursos $nuevoSingleton = Login::singletonLogin(); if(isset($_POST['nick'])) { $nick = $_POST['nick']; $password = $_POST['password']; //accedemos al método usuarios y los mostramos $usuario = $nuevoSingleton->validarUsuario($nick,$password); if($usuario == TRUE) { header("Location:home.php"); } } ?>
En el home
session_start()
if(isset($_SESSION['nombre'])){
?>
<h1>Bienvenido de nuevo <?php echo $_SESSION['nombre'] ?>.</h1>
<?php
}else{
header("Location: index.php");
}
Y finalmente como cerrar sesión?
Actividades
Revisar las siguientes funciones
1. password_hash() – used to hash the password.
2. password_verify() – to verify a password with hashed password.
Desarrollo en PHP - ADSI
Rodrigo Aranda Fernández
3. password_get_info() – Returns information of given hash.
4. password_needs_rehash() – Checks if the given hash matches the given options.
Funciones para encriptar 1. md5
2. sha1
Top Related