Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Laboratorio 06 - Sesiones en PHP
Laboratorio 06 - Sesiones en PHP
DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 1
I. OBJETIVOS
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.
IV. RECURSOS
○ En el siguiente laboratorio se trabajará con un equipo que cuente VMWare Player (mínimo versión
12).
A continuación se dará un ejemplo para el manejo de sesiones. Se requiere que se comente el código
dado.
<?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());
}
?>
<?php
session_start();
Nro. DD-106
Desarrollo de Aplicaciones en Internet
Laboratorio 06 - Sesiones en PHP
Página 3
require_once "configuracion.php";
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)){
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
<?php
session_start();
require_once "config.php";
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($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
<?php
session_start();
<!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>
<?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