Tecnologías del lado del servidor

Programación en Ambiente Web (11086)

Cookies - Sesiones

Cookies

Cookies

RFC 6265: HTTP State Management Mechanism

 

Define un conjunto de Headers HTTP

 

Objetivo: Generar un Estado en un protocolo que no lo tiene

 

¿Como lograr esto? Estructura de la Cookie

GET /cookies.php HTTP/1.1
Set-Cookie: SID=31d4d96e407aad42
GET /other.php HTTP/1.1
Cookie: SID=31d4d96e407aad42

Set-Cookie

Web Server ==> User Agent

(Response Header)

 

Ejemplos:

Set-Cookie: lang=en-US; Expires=Wed, 09 Jun 2021 10:18:14 GMT
Set-Cookie: SID=31d4d96e407aad42; Path=/; Secure; HttpOnly

Set-Cookie: Campos

Separador ; (Punto y Coma)

Expires

Max-Age

Domain

Path

Secure

HttpOnly

Cookies: Storage

Cookies: Network

Cookies: Show me the code

setcookie($cookieKey, $cookieValue, time()+3600);

setcookie('Clave', 'Valor', time()+3600, '/user', 'mydomain.com');

/**
 * Arrays de Cookies
 */
setcookie("cookie[tres]", "cookietres");
setcookie("cookie[dos]", "cookiedos");
setcookie("cookie[uno]", "cookieuno");

Problema: ¿Cuando se pueden generar las cookies?

Cookies: Show me the code

echo "<pre>";

print_r($_COOKIE);
/**
 * Array
 *   (
 *       [TestCookie] => VAlor
 *       [cookie] => Array
 *           (
 *               [tres] => cookietres
 *               [dos] => cookiedos
 *               [uno] => cookieuno
 *           )
 *   )
 */

Sesiones

Sesiones

Preservar información a lo largo de diferentes ciclos de Request / Response

 

2 Mecanismos: Cookies o URL Propagation

 

ID de Sesion

 

$_SESSION / funciones session_

 

Manejador de sesiones / Funcionamiento

Sesiones: Logica de Login

Se verifica la información enviada por el user-agent
Si el user-agent proporciona un id de sesion valido
    entonces se muestra el proyecto para ese usuario
sino
    se muestra la pantalla de login

Sesiones: Vista

<!DOCTYPE html>
<html>
<head>
    <title>Sesiones</title>
</head>
<body>
    <?php if ($hayLogin) : ?>
        <p>Usted se encuentra logueado como: <?= $username ?></p>
        <hr>
        <p><a href="index.php?sesion=cerrar">Cerrar sesión</a></p>
    <?php else : ?>
        <form id="login" action="index.php" method="post">
            <label for="user">Usuario: </label>
            <input id="user" name="user" type="text" />
            <input name="login" value="login" type="submit" />
        </form>
    <?php endif ; ?>
</body>
</html>
$hayLogin == true
$hayLogin == false

Sesiones: Controlador

<?php

session_start();

if (isset($_POST['login'])) {
    $_SESSION['login'] = $_POST['user'];
}

// Cerrar Sesion
$cerrarSesion = isset($_GET['sesion']);
$haySesion = session_status() == PHP_SESSION_ACTIVE;
if ($cerrarSesion && $haySesion) {
    $_SESSION = [];
    setcookie(session_name(), '', time() - 10000);
    session_destroy();
}

$hayLogin = isset($_SESSION['login']);
if ($hayLogin) {
    $username = $_SESSION['login'];
}

require 'index.view.php';
$_SESSION == empty
$_POST = [ 'user' => 'tomas',
           'login' => 'login' ]
$_SESSION['login'] == 'tomas'
$hayLogin == true
$username == 'tomas'
GET /?sesion=close

Sesiones: Cookies

Sesiones: Implementacion

$ php -i | grep session.save_path
session.save_path => /var/lib/php/sessions => /var/lib/php/sessions
$ sudo ls -la /var/lib/php/sessions
total 12
drwx-wx-wt 2 root  root  4096 jun  6 22:09 .
drwxr-xr-x 4 root  root  4096 mar 27  2017 ..
-rw------- 1 tomas tomas   18 jun  6 22:04 sess_et8pojbr196r4j0pepvs2l2ait
$ sudo cat /var/lib/php/sessions/sess_et8pojbr196r4j0pepvs2l2ait   
login|s:5:"tomas";%

Backend 5

By Tomas Delvechio

Backend 5

Clase de Backend sobre Cookies y Sesiones para PAW

  • 864