Está en la página 1de 13

Nro.

DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 1

I. OBJETIVOS

○ Implementar sesiones mediante el uso de PHP.

II. SEGURIDAD

Advertencia:
En este laboratorio está prohibida la manipulación de hardware, conexiones
eléctricas o de red; así como la ingestión de alimentos o bebidas.

III. NORMAS EMPLEADAS


○ No aplica

IV. RECURSOS
○ En el siguiente laboratorio se trabajará con un equipo que cuente VMWare Player (mínimo versión
12).

V. METODOLOGÍA PARA EL DESARROLLO DE LA TAREA


○ El desarrollo del laboratorio es grupal (3 personas).
Nro. DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 2

VI. EJEMPLO PRÁCTICO

A continuación se dará un ejemplo para el manejo de sesiones. Se requiere que se comente el código
dado.

Script para la creación de la base de datos


● Se debe ejecutar el siguiente script dentro de su base de datos de prueba.
usuarios.sql

CREATE TABLE users (


id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Script de configuración para acceso a la base de datos


● No olvidar colocar los datos del usuario y el nombre de la base de datos para su administración.
configuracion.php

<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', ''); // poner el nombre del usuario entre las comillas
define('DB_PASSWORD', ''); // poner el pass del usuario entre las comillas
define('DB_NAME', ''); // poner el nombre de la base de datos entre las comillas

try {
$pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME,
DB_USERNAME,
DB_PASSWORD);

$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
die("ERROR: No se pudo conectar. " . $e->getMessage());
}
?>

Formulario de registro de usuarios


● El siguiente formulario permite agregar usuarios a la tabla users.
registro.php

<?php
session_start();
Nro. DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 3

if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){


header("location: bienvenida.php");
exit;
}

require_once "configuracion.php";

$username = $password = $confirm_password = "";


$username_err = $password_err = $confirm_password_err = "";

if($_SERVER["REQUEST_METHOD"] == "POST"){
if( ! trim($_POST["username"])){
$username_err = "Por favor ingresa el nombre del usuario.";
} else{
$sql = "SELECT id FROM users WHERE username = :username";

if($stmt = $pdo->prepare($sql)){
$stmt->bindParam(":username", $param_username, PDO::PARAM_STR);
$param_username = trim($_POST["username"]);

if($stmt->execute()){
if($stmt->rowCount() == 1){
$username_err = "El usuario ya existe.";
} else{
$username = trim($_POST["username"]);
}
} else{
echo "Algo salió mal. Intentar después.";
}
}
unset($stmt);
}

if( ! trim($_POST["password"])){
$password_err = "Por favor ingresa una contraseña.";
} elseif(strlen(trim($_POST["password"])) < 6){
$password_err = "La contraseña debe tener al menos 6 caracteres.";
} else{
$password = trim($_POST["password"]);
}

if( ! trim($_POST["confirm_password"])){
$confirm_password_err = "Por favor confirma la contraseña.";
} else{
$confirm_password = trim($_POST["confirm_password"]);
if(empty($password_err) && ($password != $confirm_password)){
$confirm_password_err = "Las contraseñas no coinciden.";
Nro. DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 4

}
}

if(empty($username_err) &&
empty($password_err) &&
empty($confirm_password_err)){

$sql = "INSERT INTO users (username, password)


VALUES (:username, :password)";

if($stmt = $pdo->prepare($sql)){
$stmt->bindParam(":username", $param_username, PDO::PARAM_STR);
$stmt->bindParam(":password", $param_password, PDO::PARAM_STR);

$param_username = $username;
$param_password = password_hash($password, PASSWORD_DEFAULT);

if($stmt->execute()){
header("location: login.php");
} else{
echo "Algo salió mal. Intentar después.";
}
}
unset($stmt);
}
unset($pdo);
}
?>

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Registro</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
<style type="text/css">
body{ font: 14px sans-serif; }
.wrapper{ width: 350px; padding: 20px; }
</style>
</head>
<body>
<div class="wrapper">
<h2>Registro</h2>
<p>Por favor ingresa tus datos.</p>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>"
method="post">
Nro. DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 5

<div class="form-group <?php echo (!empty($username_err)) ? 'has-error' :


''; ?>">
<label for="username">Usuario</label>
<input type="text" name="username" class="form-control" value="<?php
echo $username; ?>">
<span class="help-block"><?php echo $username_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($password_err)) ? 'has-error' :
''; ?>">
<label for="password">Contraseña</label>
<input type="password" name="password" class="form-control"
value="<?php echo $password; ?>">
<span class="help-block"><?php echo $password_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($confirm_password_err)) ? 'has-
error' : ''; ?>">
<label for="confirm_password">Confirmar contraseña</label>
<input type="password" name="confirm_password" class="form-control"
value="<?php echo $confirm_password; ?>">
<span class="help-block"><?php echo $confirm_password_err; ?></span>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Enviar">
<input type="reset" class="btn btn-default" value="Borrar">
</div>
<p>¿ya estás registrado? <a href="login.php">Accede aquí</a>.</p>
</form>
</div>
</body>
</html>

Formulario de inicio de sesión


● El siguiente formulario permite iniciar sesión dadas las credenciales por el usuarios.
login.php

<?php
session_start();

if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){


header("location: bienvenida.php");
exit;
}

require_once "config.php";

$username = $password = "";


Nro. DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 6

$username_err = $password_err = $validate_err = "";

if($_SERVER["REQUEST_METHOD"] == "POST"){

if( ! trim($_POST["username"])){
$username_err = "Por favor ingresa tu usuario.";
} else{
$username = trim($_POST["username"]);
}

if( ! trim($_POST["password"])){
$password_err = "Por favor ingresa tu contraseña.";
} else{
$password = trim($_POST["password"]);
}

if(empty($username_err) && empty($password_err)){


$sql = "SELECT id, username, password FROM users
WHERE username = :username";

if($stmt = $pdo->prepare($sql)){
$stmt->bindParam(":username", $param_username, PDO::PARAM_STR);
$param_username = trim($_POST["username"]);

if($stmt->execute()){
if($stmt->rowCount() == 1){
if($row = $stmt->fetch()){
$id = $row["id"];
$username = $row["username"];
$hashed_password = $row["password"];
if(password_verify($password, $hashed_password)){
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $id;
$_SESSION["username"] = $username;
header("location: bienvenida.php");
} else{
$validate_err = "Credenciales erróneas.";
}
}
} else{
$validate_err = "Credenciales erróneas.";
}
} else{
echo "Algo salió mal. Intentar después.";
}
}
unset($stmt);
Nro. DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 7

}
unset($pdo);
}
?>

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Login</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
<style type="text/css">
body{ font: 14px sans-serif; }
.wrapper{ width: 350px; padding: 20px; }
</style>
</head>
<body>
<div class="wrapper">
<h2>Inicia sesión</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>"
method="post">
<div class="form-group <?php echo (!empty($username_err)) ? 'has-error' :
''; ?>">
<label for="username">Usuario</label>
<input type="text" name="username" class="form-control" value="<?php
echo $username; ?>">
<span class="help-block"><?php echo $username_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($password_err)) ? 'has-error' :
''; ?>">
<label for="password">Contraseña</label>
<input type="password" name="password" class="form-control">
<span class="help-block"><?php echo $password_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($validate_err)) ? 'has-error' :
''; ?>">
<input type="submit" class="btn btn-primary" value="Inicia sesión">
<span class="help-block"><?php echo $validate_err; ?></span>
</div>
<p>¿no tienes una cuenta? <a href="registro.php">Registrate
aquí</a>.</p>
</form>
</div>
</body>
</html>
Nro. DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 8

Página de bienvenida para los usuarios


● La siguiente página muestra información relevante para un usuario dado.
bienvenida.php

<?php
session_start();

if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){


header("location: login.php");
exit;
}
?>

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Bienvenido</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
<style type="text/css">
body{ font: 14px sans-serif; text-align: center; }
</style>
</head>
<body>
<div class="page-header">
<h1>Hola, <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>.
Bienvenido a tu página.</h1>
</div>
<p>
<a href="logout.php" class="btn btn-danger">Cerrar sesión</a>
</p>
</body>
</html>

Script para cerrar sesión


● El siguiente script sirve para terminar la sesión actual.
logout.php

<?php
session_start();
session_unset();
session_destroy();

header("location: login.php");
exit;
Nro. DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 9

?>
Nro. DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 10

VII. PROCEDIMIENTO
● Siguiendo con el ejercicio de la clase pasada, se debe implementar el uso de sesiones de forma que
existan dos tipos de usuarios, el primero debe ser un administrador con permisos totales sobre la base
de datos (lectura, escritura, eliminación, etc.) y un segundo tipo de usuario que solo tenga permisos de
lectura sobre la información de la base de datos.
Nro. DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 11

VIII. OBSERVACIONES
● Para el laboratorio se usó un equipo con conexión a internet, una máquina virtual y visual studio code.
● Se realizaron scripts para la implementación de las sesiones para 2 tipos de usuario.
● Se editaron los scripts que se otorgaron en este laboratorio para que se adecue a la implementación
de las sesiones para 2 tipos de usuarios.
● El diseño de la página web se realizó en base al prototipo entregado en el laboratorio 05 y se realizó
un diseño adaptativo.
● Se descargaron iconos que la página web Flaticon ofrece y los implementamos en nuestra página
web.
● Se añadió una tabla de usuarios en la base de datos que contenga el usuario, password y tipos de
usuario.

IX. CONCLUSIONES
● Al desarrollar el laboratorio aplicamos los conocimientos adquiridos en la sesión de teoría.
● Se culminó satisfactoriamente el laboratorio, cumpliendo con lo requerido
● Se implementaron sesiones para 2 tipos de usuario, las cuales consisten en 2 tipos de usuario
administrador y lector, el primero tendrá permisos totales sobre la base de datos y el segundo solo
podrá observar los datos.
● El diseño adaptativo de la página web permite que los usuarios puedan ingresar desde cualquier
dispositivo, por lo tanto, mejorara la experiencia del usuario ya que la interacción será correcta y el
diseño será visualmente agradable.
● Con PHP se establece la conexión entre el servidor y la interfaz de usuario.
● Se realizaron script para las siguientes acciones: para añadir la tabla de usuarios a la base de datos,
para la configuración para acceso a la base de datos, para el registro de usuarios, para el formulario
de inicio de sesión, para la página de bienvenida y para el cierre de sesión.
Nro. DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 12

X. REFERENCIAS
Tutorial Republic. (s. f.). Creating a User Login System with PHP and MySQL [Wiki]. Recuperado 10 de
abril de 2019, de Tutorial Republic - Online Web Development Tutorials website:
https://www.tutorialrepublic.com/php-tutorial/php-mysql-login-system.php

También podría gustarte