Está en la página 1de 20

Sesiones y Control de Usuarios con PHP

Mauricio Alfredo González Adonis

Programación Avanzada 1

Instituto IACC

21 Septiembre 2020
1.- De acuerdo con los conocimientos previos al uso de sesiones en la programación

avanzada, describa que características debe tener una sesión.

Las sesiones han sido un punto muy importante en lo que es el acceso a datos de tipo reservado o

también, no tan reservado, siempre se debe mantener una registro de acceso externo a cierta

información que tanto deseamos mantener bajo custodia.

En ciertas páginas web, por ejemplo, necesitamos realizar modificaciones tanto a información

como a su estructura, el uso de sesiones, mantiene la importancia de acceder de modo

“autorizado” la cual almacenará el navegador utilizado por el usuario a medida que vaya

ingresando al sitio en cuestión, para que así quede almacenado remotamente el registro de acceso

a la estructura o modificación de la página web.

La variable Súper Global $_SESSION es la encargada de almacenar la variable cuando se

termina una sección de código PHP y la información de sesión es almacenada en el

administrador de sesiones para que así quede un registro de ingreso.

Estos ingresos siempre son individuales para que así no quede toda la información de sesión

almacenada en forma global.

Lo que requiere el inicio de sesión autorizada es para que el usuario autorizado pueda realizar la

manipulación de datos como modificación, agregado de datos, editado o eliminado, y, luego de

realizar las tareas pueda cerrar y quedar registrado por el autor.

En alguna página web, es necesario el uso de sesiones para que así podamos ingresar a la sección

de compras de algún producto y con una Membresía quedemos registrados para poder hacer una

compra online, a través de un carrito de compras.


Las características que debe tener una sesión son:

CREAR: crear un usuario con identificación y contraseña.

ASIGNACIÓN: asignarle sus atributos (usuario administrador, usuario medio con ciertos

permisos, usuario lector de datos).

PERFIL: características de usuario (nombre, apellido, contraseña, correo electrónico, teléfono).

TIEMPO DE ACCESO: es importante dar un permiso dentro de ciertas horas para que el

usuario pueda mantener su sesión activa mientras el sistema se lo permita, esto es importante

para que el tiempo de acceso inactivo no quede abierto y así cerrar automáticamente.

2.- Qué tipo de errores podría diferenciar en el uso de sesiones. Fundamente.

Los errores más comunes en sesiones puede ser dependiendo del punto de vista.

En el caso de usuarios que acceden a ciertas páginas web con sesiones es que su clave no sea la

que corresponda o su nombre usuario no sea el que haya sido registrado, simplemente deber

acceder por su registro para recuperar nombre de usuario y su clave correspondiente.

Por el lado del programador las fallas son diversas, problemas de sintaxis ya sea una mala

concatenación, salidas de pantallas sin un término, cierre de paréntesis, cierre de línea de código,

variables no declaradas, una función no heredable.

Otro error que no depende de usuario ni programador, son los tiempos de espera de acceso a un

servidor donde deseamos ingresar, ya sea vía interna o externa, esto se debe a tráfico de datos

donde los tiempos son mucho mayores de lo esperado, cuando esto sucede, la conexión se

interrumpe y hay que volver a acceder,


3.- Cree una tienda virtual para una librería, no más de 5 artículos, combinarlos el uso de

sesiones y carrito de compras.

INDEX.PHP

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Bases de Datos en PHP</title>
</head>

<body align=”center”>
<p align=center><h2>Se crea la conexión a base de datos declarando variables</h2></p>
<?php
$serv = "localhost";
$user = "root";
$pass = "";
$bd = "biblioteca";$usua="usuarios";$books="Libros";
$conection = new MySQLi($serv,$user,$pass);
if ($conection->connect_error)
{
die("Error: Por favor, volver a comprobar Servidor".$conection->connect_error);
}
$sql = "Create DataBase $bd";

if($conection -> query($sql) === true)


{
echo "Base de datos Biblioteca ha sido creada <br><br><br>";
}
else
{
die ("Error , no se pudo crear Base de Datos".$conection->error);
}
$conection = new MySQLi($serv,$user,$pass,$bd);
$sql = "Create Table $usua (usuario varchar(15) not null, clave varchar(20) not null)";

if($conection->query($sql) === true)


{
echo "La tabla Usuarios ha sido creada exitosamente<br><br><br>";
}
else
{
die("Error, no se pudo crear la tabla".$conection->error);
}
$sql = "INSERT INTO $usua (usuario, clave) VALUES ('Mauro','magogoma')";

if ($conection->query($sql) === true)


{
echo "Se logró agregar Usuario y Contraseña exitosamente<br><br><br>";
}
else
{
die("Error, no se logró agregar Usuario y Contraseña".$conection->error);
}

$sql = "Create Table $books (ID INT auto_increment, primary key (ID), ISDN bigint(15)
not null, Titulo varchar(20) not null, Autor varchar(30) not null, Editorial varchar(25) not
null, Anio int(4) not null, Genero varchar(25) not null, Precio int(6) not null)";

if($conection->query($sql) === true)


{
echo "La tabla Libros ha sido creada exitosamente<br><br><br>";
}
else
{
die("Error, no se pudo crear la tabla".$conection->error);
}
$sql = "INSERT INTO $books (ISDN, Titulo, Autor, Editorial, Anio, Genero, Precio)
VALUES (1234567890123,'La Santa Biblia','Valera Español','Bíblicos',1960,'Libro de
Historias Bíblicas',10000)";

$sql.=",(2047808596748,'Carpintería','Patricio Ortega','Doméstika',2019,'Libros
Instructivos',15000)";

$sql.=",(9789871857616,'Computación','MP Ediciones','MP
Ediciones',2012,'Computación Básica',14000)";

$sql.=",(9789500007511,'Electricidad','Agustín Rela','Instituto Nacional de Educación


Tecnológica',2010,'Electridad y Electrónica',20500)";

$sql.=",(9786077073833,'Logística del Automóvil','Sabria


Federico','AlfaOmega',2017,'Automotriz',12800)";

$sql.=",(9783958630703,'Tabla Metal Mecánica','Wellers


Hermann','Christiani',2020,'Metal Mecánica',21400)";

if ($conection->query($sql) === true)


{
echo "Se lograron agregar Los datos de Libros exitosamente<br><br><br>";
}
else
{
die("Error, no se logró agregar Datos de Libros".$conection->error);
}

echo "<a href=conexion.php>Presione aquí para continuar</a>";

?>
</body>
</html>

En el inicio de INDEX.PHP

Se hace la conexión con base de datos “biblioteca” la cual se definen con 2 tablas, una de
usuarios y una de libros, la tabla usuarios consta de 2 campos y la tabla libros contiene 7 campos,
la cual hay 6 artículos definidos, y configurado con un usuario y una contraseña en los 2 campos.
Una vez abierto e insertado datos se pasa a sección de CONEXIÓN.

Fig.-1 – Acceso, creación, insertar ítems en base de datos.


CONEXIÓN.PHP

<html>
<body align="center">
<?php

$host = "localhost";
$usuario = "root";
$clave = "";
$bd = "biblioteca";

$conexion = mysqli_connect($host,$usuario,$clave,$bd);

if ($conexion)
{
echo "La base de datos ha sido conectada correctamente";
}
else
{
echo "No se pudo conectar a la base de datos";
}
echo "<br><br><br><a href=login.php>Entrar a Login</a>";
?>
</body>
</html>

Se accede y se confirma el acceso a base de datos “biblioteca”

Al final se presiona para entrar a sesión

Fig.- 2 – Se confirma conexión a base y botón para entrar a sesión.


LOGIN.PHP

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Sesión Login</title>
</head>
<body>
<center>
<form action="loguear.php" method="post">
<input type="text" name="usuario">
<br>
<input type="password" name="clave">
<br>
<button type="submit">Entrar</button>
</form>
</center>
</body>
</html>

Simple formulario de acceso a sesión con nombre de usuario y clave previamente inscrita en

registros de la base de datos misma. Nombre de usuario : Mauro, clave: magogoma

Fig.- 3 – Cuadro de acceso de sesión.


En caso de que haya un error de usuario y contraseña, en LOGEAR.PHP están las verificaciones

de las variables de usuarios definidas para acceder.

LOGEAR.PHP

<?php
require 'conexion.php';
session_start();
$usuario = $_POST['usuario'];
$clave = $_POST['clave'];
$q = "SELECT COUNT(*) AS contar FROM usuarios WHERE usuario = '$usuario' and clave =
'$clave'";
$consulta = mysqli_query($conexion,$q);
$array = mysqli_fetch_array($consulta);
if ($array['contar']>0)
{
$_SESSION['username'] = $usuario;
$_SESSION['clave'] = $clave;
header ("location:principal.php");
}
else
{
echo "Los datos son incorrectos";
}

Se puede apreciar que se puede comparar variables de sesión, si resulta verdadera accede, de lo

contrario arrojará error y dará la opción de volver a acceder. La conexión a base se enlaza con

“require” Al ser el acceso verdadero, inmediatamente pasará a página principal de acceso a

biblioteca

Fig.- 4.- error de acceso con datos erróneos.


PRINCIPAL.PHP

<html>
<head>
<meta charset="utf-8"/>
<title>Registro de Libros</title>
</head>
<body>
<br/><br/>
<form method="post" action="LibroBD.php">
<table border='2' align='center'>
<caption>Biblioteca</caption>
<tr>
<td>ISDN:</td>
<td> <input type="text" name="isdn" size="15" /> </td>
</tr>
<tr><td>Titulo:</td>
<td> <input type="text" name="titulo" size="50" /> </td>
</tr>
<tr>
<td>Autores:</td><td> <input type="text" name="autores" size="50" /> </td>
</tr>
<tr>
<td>Editorial:</td>
<td> <input type="text" name="editorial" size="50" /> </td>
</tr>
<tr>
<td>Año:</td>
<td> <input type="number" name="anio" size="5" /> </td>
</tr>
<tr>
<td>Genero:</td><td> <input type="text" name="genero" size="30" /> </td>
</tr>
<tr>
<td>Precio:</td><td> <input type="text" name="precio" size="10" /> </td>
</tr>
<tr>
<td colspan='2' align='center'>
<input type="submit" name="Ingresar" value="Ingresar">
<input type="submit" name="carrito" value="Carrito de Compras">
<input type="reset" name="limpiar" value="Cancelar" />
</td>
</tr>
</table>
</form>
</body>
</html>
Un formulario de llenado en caso de querer agregar algún artículo, de otro modo, se puede

cancelar o hacer un acceso al carrito de compras.

Fig.- 5 – Formulario de ingreso de artículo.

Fig.- 6 – Llenando formulario de datos.

Fig.- 7 – Comprobante de llenado de datos.


LIBROBD.PHP

<?php
$host = "localhost";
$usuario = "root";
$clave = "";
$bd = "biblioteca";

$conexion = mysqli_connect($host,$usuario,$clave,$bd);

if ($conexion)
{
echo "BASE DE DATOS CONECTADA";
}
else
{
echo "No se pudo conectar a la base de datos";
}
$isdn=$_POST['isdn'];
$titulo=$_POST['titulo'];
$autores=$_POST['autores'];
$editorial=$_POST['editorial'];
$anio=$_POST['anio'];
$genero=$_POST['genero'];
$precio=$_POST['precio'];

if(isset($_POST['Ingresar']))
{
$ingresar=$_POST['Ingresar'];
}
else
{
$ingresar='';
}
if(isset($_POST['carrito']))
{
$carrito=$_POST['carrito'];
}
else
{
$carrito='';
}
if($isdn!='' && $titulo!='' && $autores!='' && $editorial!='' && $anio!='' && $genero!
='' && $precio!='')
{
$usuario="root";
$clave='';
$bd="biblioteca";
$host="localhost";
$result=NULL;

$mysqli = new mysqli($host, $usuario, $clave, $bd);


if($mysqli!=NULL)
{
if($ingresar == 'Ingresar')
{
$query = "INSERT INTO libros (ISDN, Titulo, Autor, Editorial, Anio,
Genero, Precio)VALUES('" . $isdn . "','" . $titulo . "', '" . $autores . "', '"
. $editorial . "', " . $anio . ", '" . $genero . "', '" . $precio . "')";
$result = $mysqli->query($query);
if($result===TRUE)
{
echo "<br/><center><a href='principal.php'>Registro exitoso, haga
clic aqui para regresar<a></center>";
}
}

}
}
else
{

header ("location:carrito.php");

}
echo "<br/><a href='principal.php'>Haga clic aqui para regresar<a>";

?>

Código la cual se puede ingresar los datos del FORM a la base de datos con código SQL.
CARRITO.PHP

<?php

$host = "localhost";
$usuario = "root";
$clave = "";
$bd = "biblioteca";

$conexion = mysqli_connect($host,$usuario,$clave,$bd);

?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">

<title>Carrito de Compras</title>

</head>

<body><br>
<div align="center">
<h3>Vista de Libros Disponibles</h3>

<img src="imagenes/carrito.jpg" width="100px;"></a>


<hr>

<table border="4" bordercolordark="#000000" style="width:700px;">


<thead>
<th>ISDN</th>
<th>TÍTULO</th>
<th>AUTOR</th>
<th>EDITORIAL</th>
<th>AÑO</th>
<th>GÉNERO</th>
<th>PRECIO</th>
<th>ACCIONES</th>

</thead>

<?php
$sql = "SELECT * FROM libros";
$resultado = mysqli_query($conexion,$sql);

while ($show=mysqli_fetch_array($resultado))
{
?>

<tbody>

<tr style="width:600px;">
<td style="width:100px;"><?php echo $show['ISDN'] ?
></td>
<td style="width : 300px;">
<?php echo $show['Titulo'] ?>
</td>
<td style="width : 300px;">
<?php echo $show['Autor'] ?>
</td>
<td style="width : 300px;">
<?php echo $show['Editorial'] ?>
</td>
<td style="width : 300px;">
<?php echo $show['Anio'] ?>
</td>
<td style="width : 300px;">
<?php echo $show['Genero'] ?>
</td>
<td style="width : 300px;">
<?php echo '$'.$show['Precio'] ?>
</td>
<td style="width : 300px;">
<form action="carrito.php" method="post" >
<input type="hidden" name="txtLibro" value="<?php echo
$show['Titulo'] ?>">
<input type="number" name="cantidad" value="1"
style="width:50px;"><br>
<input type="hidden" name="txtValor" value="<?php echo
$show['Precio'] ?>">
<input type="submit" name="agregar"value="Agregar"
value="btnAdd">
</form>
</td>
</tr>
<tbody>

<?php
}
?>
</table>
</div>
<?php
echo "<br><br>";
if (isset($_POST["agregar"]))
{
$Producto = $_POST['txtLibro'];
$a = $_POST['cantidad'];
$b = $_POST['txtValor'];
$total = $a*$b;
echo "<br><br>";
echo "El total del Producto $Producto es igual a $ $total pesos";
}
else
{
echo "No se ha realizado ninguna compra";
}

echo "<br><br><br><a href=salir.php>Salir de Sesion</a>";


?>
</body>
</html>

Fig.- 8 – Carrito de compras sin movimiento.


Fig.- 9 – Compra de 4 Biblias, la cual arroja resultado.
Fig.- 10.- Compra de 5 libros de Carpintería y su resultado.

SALIR.PHP

<?php

session_start();

session_destroy();

header ("location:login.php");
exit();

La sección salir, abre y destruye sesión, devolviendo a LOGIN.PHP para volver a acceder.
Fig.- 11 – Retorno de Salir a LOGEIN.PHP
Bibliografía

Características de Sesiones en base de datos

Acceso, creación, atributos, etc de un usuario para acceder a sistemas

https://docs.microsoft.com/es-es/sql/relational-databases/security/authentication-

access/create-a-database-user?view=sql-server-ver15

También podría gustarte