Manejo de Sesiones PHP
¿Qué es una sesión?
Una sesión es un mecanismo para persistir información en diferentes páginas web para identificar usuarios
mientras estos navegan un sitio o app. Te preguntarás por qué las sesiones son necesarias en un sitio web. Para
ver porqué las sesiones son necesarias, tenemos que viajar atrás y ver como esta diseñado el protocolo HTTP.
El protocolo HTTP es un protocolo sin estado, lo que significa que no hay forma de que un servidor recuerde a un
usuario específico entre múltiples peticiones. Por ejemplo, cuando accedes a una página web, el servidor sólo es
responsable de proveer el contenido de la página solicitada. Así que cuando accedes a otras páginas en el mismo
sitio web, el servidor web interpreta cada petición separadamente, como si no estuvieran relacionadas unas con
otras. No hay forma para el servidor de sane que cada petición fue originada por el mismo usuario.
El siguiente diagrama refleja el protocolo HTTP en pocas palabras.
En este modelo, si quieres mostrar información relativa a un usuario específico, deberás autenticar al
usuario en cada petición. Imagina que tuvieras que introducir tu nombre de usuario y contraseña en
cada página que muestre tu información de perfil! Sí, sería incómodo y nada práctico, y aquí es donde
las sesiones entran en juego.
Una sesión permite compartir información entre las diferentes páginas de un único sitio web o app, así
que ayuda a mantener el estado. Esto permite al servidor conocer que todas las peticiones se originan
desde el mismo usuario, permitiendo al sitio web mostrar información y preferencias específicas de ese
usuario.
Uso básico de Sesiones
Las sesiones son una forma sencilla de almacenar datos para usuarios de manera individual
usando un ID de sesión único. Esto se puede usar para hacer persistente la información de estado
entre peticiones de páginas. Los ID de sesiones normalmente son enviados al navegador
mediante cookies de sesión, y el ID se usa para recuperar los datos de sesión existente. La
ausencia de un ID o una cookie de sesión permite saber a PHP para crear una nueva sesión y
generar un nuevo ID de sesión.
Las sesiones siguen un flujo de trabajo sencillo. Cuando una sesión se inicia, PHP recuperará una
sesión existente usando el ID pasado (normalmente desde una cookie de sesión) o, si no se pasa
una sesión, se
¿Cómo creo una sesión en PHP?
Si la petición NO viene con una cookie (o un parámetro SID) O el valor no corresponde con una sesión activa en el servidor:
1.Se genera un nuevo ID de sesión
2.Se inicializa el espacio de almacenamiento en el servidor
3.Se envía el encabezado correspondiente a la creación de la cookie de sesión (Asumiendo por supuesto que este el método de
propagación de ID seleccionado)
Si la petición SI viene con una cookie (o un parámetro SID) Y el valor corresponde con una sesión activa en el servidor:
4.Se lee el contenido del archivo de sesión correspondiente
2.Se inicializa el arreglo $_SESSION con los valores contenidos en dicho archivo
Este ID de una sesión se genera cuando se crea la sesión, mediante el uso de la función session_start()
<?php
session_start();
echo session_id();
?>
Flujo de trabajo con sesion
Las sesiones siguen un flujo de trabajo sencillo. Cuando una sesión se inicia, PHP recuperará una
sesión existente usando el ID pasado (normalmente desde una cookie de sesión) o, si no se pasa una
sesión, se creará una sesión nueva. PHP rellenará la variable superglobal $_SESSION con cualesquiera
datos de la sesión iniciada. Cuando PHP se cierra, automáticamente toma el contenido de la variable
superglobal $_SESSION, la serializa, y la envía para almacenarla usando el gestor de almacenamiento de
sesiones.
Por omisión, PHP usa el gestor interno de almacenamiento files, el cual se establece mediante
session.save_handler. Éste guarda los datos de sesión en el servidor en la ubicación especificada por
la directiva de configuración session.save_path.
Las sesiones se puede iniciar manualmente usando la función session_start(), si la directiva
session.auto_start se establece a 1, una sesión se iniciará automáticamente ante cualquier petición de
arranque.
¿Cómo elimino una sesión en PHP?
Las variables se puede desasignar o desregistrar y la sesión se destruye:
<?php
sessión_start();
unset($_SESSION[‘mivariable']);
session_destroy();
?>
En versiones superiores, las sesiones normalmente se cierran automáticamente cuando PHP termina de
ejecutar un script, pero se pueden cerrar manualmente usando la función session_write_close().
¿Cómo guardo y recupero variable en Sesión?
<?php
$_SESSION[‘miVariable'] = 'value';
?>
En una pagina:
<?php
$nombre= “Pedro Picaprieda”;
$_SESSION[‘nomUsuario'] = $nombre;
?>
En otra pagina:
<?
Echo “Bienvenido, ” . $_SESSION[‘nomUsuario'] ;
?>
Ejemplo de uso de sesión
Manejo de Roles PHP
¿Qué es el rol del usuario?
Un rol define un conjunto de actividades y la fuente de la información servicios que un usuario
individual necesita para conseguir un desarrollo o un objetivo empresarial.
Un rol, a diferencia de una persona, define cómo se cumple un proceso, y cómo conduce el proceso a
alcanzar un objetivo.
Los derechos de seguridad que permiten a los usuarios acceder o actualizar la información se
definen en un perfil de rol de usuario. Un perfil de rol de usuario es una colección con
nombre de derechos de acceso y normalmente corresponde a las responsabilidades
empresariales de un empleado. Cada perfil de función de usuario controla el acceso a
componentes tales como artículos de conocimientos, elementos de trabajo (incidentes,
solicitudes de cambio), creación, administración y otras credenciales. Piense en los perfiles de
rol de usuario como la definición de lo que se le permite hacer.
Creación de tablas asociadas
CREATE TABLE `roles` (
`idRol` int(10) unsigned NOT NULL AUTO_INCREMENT,
`nombre` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`idRol`),
UNIQUE KEY `nombre` (`nombre`)
);
CREATE TABLE `usuarios` (
`idUsuario` int(10) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`password` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`rolId` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`idUsuario`),
UNIQUE KEY `email` (`email`),
KEY `fk_roles` (`rolId`),
CONSTRAINT `fk_roles` FOREIGN KEY (`rolId`) REFERENCES `roles` (`idRol`)
);
¿Cómo manejo los roles?
Los roles y responsabilidades se definen a nivel de la organización y del proyecto y se debe
establecer ambos para el equipo en diferentes momentos. Contar con una estructura de equipo
sólida en el nivel organizacional es fundamental.
Una vez que todos en el equipo conocen sus roles y responsabilidades dentro de la organización,
se puede abordar cada proyecto de forma individual, estableciendo una matriz de las funciones
del proyecto a las que tendrá acceso cada uno de los roles.
Manejo de los roles con variables de sesión
<html>
<body>
<form action="procesarLogin.php" method="post">
<input type="text" name="username"/>
<input type="password" name="password"/>
<input type="submit" value="Ingresar"/>
</form>
</body>
</html>
Manejo de Cookies PHP
¿Qué es una cookie?
Son pequeñas porciones de información se quedan registradas en el navegador permitiendo
identificar a este a través de diferentes páginas de un mismo sitio e incluso durante visitas entre
distintos días, muy ventajoso a comparación de las sesiones.
Realmente las cookies no son mas que cadenas de texto que son enviadas desde el servidor al
cliente (navegador) y almacenadas en este, luego el navegador envía estas cookies al servidor
permitiendo así la identificación del cliente en el servidor.
¿Para que sirven las cookies?
•Las cookies nos permiten guardar información en el navegador web haciendo uso de
(nombre=valor), esta información son enviados al servidor en cada petición.
•En pocas palabras las cookies es un método que permite guardar información en el disco duro del
ordenador (cliente) para recuperarla más adelante.
•Ahora, hablando de seguridad, los usos de cookies no son recomendadas para almacenar información
sensible puesto que es información enviada por el cliente (y puede ser alterada por terceros) y
cualquier dato importante debe ser siempre tratado con la mayor seguridad posible.
¿Es conveniente usar cookies?
Crear cookies en PHP
Las cookies se controlan por medio de una función, que nos sirve para generarlas y guardarlas en el navegador del
usuario. La función setcookie(), que recibe varios parámetros, entre ellos, el nombre de la cookie, el valor y la
caducidad. El único parámetro obligatorio es el primero, el nombre de la cookie, los demás son opcionales.
Nombre
Un string con el nombre que queremos darle a la cookie a guardar. Puede ser cualquiera que deseemos.
Valor
Una cadena de caracteres que es el valor que va a tener la cookie.
Caducidad
Es un timestamp con el valor de la fecha en la que caducará la cookie. Lo normal es utilizar la función time(), que
genera el timestamp actual y sumarle el número de segundos que quedamos que dure la cookie. Por ejemplo, time()
+ (60 * 60 * 24 * 365) haría que la cookie durase un año en el sistema del usuario.
Ruta
El camino o ruta donde la cookie se podrá utilizar dentro del dominio. Por defecto, la cookie se podrá utilizar en el
directorio donde se ha creado y sus subdirectorios. Si indicamos "/" la cookie tendrá validez dentro de todo el dominio.
Dominio
Es el subdominio donde se podrá acceder a la cookie. Las cookies sólo se pueden generar y utilizar para el dominio de
la página donde está colocado el script, pero podemos hacerlo visible para todos los subdominios del dominio de la
web por medio de ".midominio.com".
Seguro
Es un boleano que, si es true, indica que la cookie sólo puede ser transmitida por shttp (http seguro).
Recuperar cookies con PHP
Para recibir las cookies que el navegador del usuario pueda tener creadas en el sistema se utiliza el array asociativo
$_COOKIE. En este array están todas las cookies que tiene disponible la página PHP en el dominio y el directorio
donde está colocado.
<?php
if($_POST) {
setcookie("usuario", $_POST['nombreForm'], time()+3600, "/", $_POST['dominioForm']);
} ?>
<html>
<head>
<title>Ejemplo de cookie en PHP </title>
</head>
<body>
<?php
if ($_COOKIE) {
echo "Hay Cookies: <br>";
print_r($_COOKIE);
}
else {
echo "No hay Cookies. <br>";
} ?>
<p> <strong>Ejemplo de grabación de una cookie:</strong> </p>
<form action="" method="post">
Nombre: <input type="text" name="nombreForm"> <br> <br>
Dominio: <input type="text" name="dominioForm"> <br> <br>
<input type="submit" value="Guardar Cookie">
</form>
</body>
</html>