Desarrollo de aplicaciones web con PHP y MySQL

Cookies y sesiones en PHP

Sergio Sáez y José Luis Poza

E.T.S. de Ingeniería Informática

Cookies en PHP

Cookies en PHP (cont.)

Estableciendo una cookie

Estableciendo una cookie (cont.)

<?php
setcookie
("nombre""Sergio Saez");
setcookie("usuario""ssaez"time()+3600); // Expira en una hora
setcookie("password"$passwordtime()+3600"/~ssaez/",".upv.es");
setcookie("password"""0""""true);
?>

Cookies en el navegador


Accediendo a una cookie en PHP

<?php // Establece la cookie
  
setcookie("nombre""Sergio Sáez");
?>
<?php // La siguiente página que se cargue podrá verla
  
echo "Nombre: "$_COOKIE["nombre"];
?>
Nombre: Sergio Sáez
<?php // La cookie no se puede ver en el mismo script que la define
  
if (!isset($_COOKIE["nombre"])) {
    
setcookie("nombre""Desconocido");
  } 
// endif
  
echo "Nombre: "$_COOKIE["nombre"];
?>
PHP Notice:  Undefined index: nombre in Standard input code on line 5
Nombre:

Flujo de datos con las cookies

  1. El navegador solicita una página en PHP
  2. El servidor web la procesa, genera una cookie y se la envía al navegador.
    • En el script que genera la cookie, ésta no se puede ver.
  3. El navegador la almacena, y la enviará en todas las siguientes peticiones a ese servidor.
  4. El interprete PHP verá las nuevas cookies que le envía el navegador.



Flujo de datos con las cookies (cont.)

Primera petición
GET /~ssaez/intranet/ HTTP/1.1
Host: viver.disca.upv.es:8080
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.12) Gecko/20090207 ...
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain; ...
Accept-Language: es,en;q=0.7,en-us;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Respuesta
HTTP/1.1 200 OK
Date: Thu, 14 Feb 2009 19:08:55 GMT
Server: Apache/2.2.4 (Ubuntu) mod_python/3.3.1 Python/2.5.1 PHP/5.2.3-1ubuntu6.3
X-Powered-By: PHP/5.2.3-1ubuntu6.3
Set-Cookie: PHPSESSID=563df31d660d982d9df4721cbc07aafb; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 7344
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
   <head>
...

Flujo de datos con las cookies (cont.)

Siguinte petición
GET /~ssaez/intranet/ HTTP/1.1
Host: viver.disca.upv.es:8080
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.12) Gecko/20090207 ...
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain; ...
Accept-Language: es,en;q=0.7,en-us;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=563df31d660d982d9df4721cbc07aafb

Vectores de cookies

Sesiones en PHP

Sesiones en PHP (cont.)

Acceso a las variables de sesión

Ejemplo de uso de $_SESSION

Otras funciones

Precauciones en el uso de sesiones

Comenzar una sesión
Se debe comenzar una sesión con session_start() en cada fichero PHP en que se quieran utilizar las variables de sesión, ya sea para modificarlas o para consultarlas.


Cuidado, si se utilizan cookies para almacenar el identificador de sesión, no se debe enviar nada hacia el navegador antes de comenzar la sesión.

Destruir una sesión
Una sesión se destruye con session_destroy() sólo cuando ya no quieres volver a utilizar las variables de sesión existentes.


No se debe utilizar al final de cada fichero PHP, sólo cuando el usuario se vaya a "desconectar".