Вы находитесь на странице: 1из 6

Desarrollo en PHP - ADSI

Conceptos bsicos de las sesiones en PHP

Las sesiones son un mecanismo para almacenar informacin en el servidor que


permanecer entre un acceso y otro.
Al conectarse un usuario se le asigna un identificador de sesin con el que se
asociar la informacin.
Cuando se inicia una sesin en PHP comprueba automticamente si ya exista
alguna, en el caso que exista recupera toda la informacin de la sesin.
A la informacin que se almacena en una sesin se le llama variable de sesin.
Se crea una sesin con la funcin session_start().
El vector $_SESSION almacena las variables de sesin.
Para
destruir
los
datos
asociados
a
una
sesin
se
utiliza
la
funcin session_destoy().

Crear sesin
$_SESSION['username'] = $results['username'];
header('location: paginas/home.php ');
exit;

Recuperar Sesin
session_start();
if(isset( $_SESSION['username'] )){

echo 'Bienvenido '.$_SESSION['username'];


se muestra el men
}else{
Redireccionar a la pgina de logueo
}
Logout
session_start();
unset($_SESSION["nombre_usuario"]);
unset($_SESSION["nombre_cliente"]);
session_destroy();
header("Location: index.php");
exit;
Rodrigo Aranda Fernndez

Desarrollo en PHP - ADSI

$_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()

Rodrigo Aranda Fernndez

Desarrollo en PHP - ADSI


{
trigger_error('La clonacin 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);

Rodrigo Aranda Fernndez

Desarrollo en PHP - ADSI


$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 clonacin 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>

Rodrigo Aranda Fernndez

Desarrollo en PHP - ADSI


En el controlador:
require_once 'Login.php';
//accedemos al mtodo singleton que es quin 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 mtodo 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 sesin?

Actividades
Revisar las siguientes funciones

1. password_hash() used to hash the password.


2. password_verify() to verify a password with hashed password.
Rodrigo Aranda Fernndez

Desarrollo en PHP - ADSI


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

Rodrigo Aranda Fernndez

Вам также может понравиться