Sesiones y cookies en php

21
LOGO Msig. Ing. Robert Moreira Centeno [email protected] Septiembre de 2016 TEMA: «COOKIES Y SESIONES EN PHP» 1. ¿Qué son las cookies? Especificación RFC 6265(Abril del 2011) 2. ¿Cómo se crean las cookies ? 3. ¿Cómo leer cookies ? 4. ¿Cómo borrar cookies en PHP ? 5. EJEMPLO: Detectar si un usuario ha regresado al sitio web o es nuevo 6. EJEMPLO: Tiempo transcurrido (años, meses, días, horas, minutos y segundos) desde la última vez que un usuario visito un website. 7. EJEMPLO: Contador de visitas 8 . EJEMPLO: Elegir el color de una página con cookie 9. Cookie definida como un array 10. Concepto y uso de sesiones en PHP 11. EJEMPLO: GUARDAR Y LEER EN EL ARRAY $_SESSION (Administrando la sesión con cookies ) 12. EJEMPLO: GUARDAR Y LEER EN EL ARRAY $_SESSION (Administrando la sesión con URL) 13. EJEMPLO: Contador de visitas con sesiones 14. EJEMPLO: Página de acceso con usuario y contraseña 15. EJEMPLO: Control de autenticación en 2 o más páginas Descargar Diapositiva y Ejercicios en: http:// ouo.io/dT95PJ

Transcript of Sesiones y cookies en php

LOGOMsig. Ing. Robert Moreira [email protected]

Septiembre de 2016

TEMA:

«COOKIES Y SESIONES EN PHP»

1. ¿Qué son las cookies? Especificación RFC 6265(Abril del 2011)

2. ¿Cómo se crean las cookies?

3. ¿Cómo leer cookies?

4. ¿Cómo borrar cookies en PHP?

5. EJEMPLO: Detectar si un usuario ha regresado al sitio web o es

nuevo

6. EJEMPLO: Tiempo transcurrido (años, meses, días, horas, minutos y

segundos) desde la última vez que un usuario visito un website.

7. EJEMPLO: Contador de visitas

8. EJEMPLO: Elegir el color de una página con cookie

9. Cookie definida como un array

10. Concepto y uso de sesiones en PHP

11. EJEMPLO: GUARDAR Y LEER EN EL ARRAY $_SESSION

(Administrando la sesión con cookies)

12. EJEMPLO: GUARDAR Y LEER EN EL ARRAY $_SESSION

(Administrando la sesión con URL)

13. EJEMPLO: Contador de visitas con sesiones

14. EJEMPLO: Página de acceso con usuario y contraseña

15. EJEMPLO: Control de autenticación en 2 o más páginas

Descargar Diapositiva y

Ejercicios en:

http://ouo.io/dT95PJ

1. ¿Qué son las cookies.?

Company Logo

Conseguir información sobre los hábitos de navegación del usuario, e intentos de spyware

(programas espía), por parte de agencias de publicidad y otros. Esto puede causar problemas de

privacidad y es una de las razones por la que las cookies tienen sus detractores.

En realidad, las cookies son solo datos, no código, luego no pueden borrar ni leer información del

ordenador de los usuarios.

En una cookie se puede almacenar muy pocos datos (hasta un máximo de 4093 caracteres por

cada cookie), y solo es posible almacenar hasta 20 cookies por dominio (esto es importante tenerlo

presente por si en distintas sesiones de nuestro sitio hacemos uso de cookies), y un navegador solo

puede almacenar hasta 300 cookies en total, compartidas entre todos los sitios que ese usuario

visita (de lo contario, el navegador empezara a eliminar las cookies más antiguas, lo que constituye

la razón de que algunos sitios que usan cookies para recordar nuestros datos, nos vuelvan a pedir

una y otra vez que nos identifiquemos, periódicamente: es porque su cookie fue borrada ,

desplazada por otras cookies mas nuevas de otros sitios que fuimos visitando).

Fuente:

http://disenowebakus.net/almacenar-variables-en-cookies.php

2. ¿Cómo se crean las cookies? (PARTE 1 DE 3)

Company Logo

Ejemplo: setcookie (‘nombre’, ‘Ana’, time() + 4800)

- El nombre de la cookie es nombre, contendrá el valor Ana, y expirará 4800

segundos después de su creación.

bool setcookie ( string $name

[, string $value

[, int $expire = 0

[, string $path

[, string $domain

[, bool $secure = false

[, bool $httponly = false ]

]

]

]

]

] )

- Las cookies se crean usando la función setcookie, Todos los argumentos exceptuando el argumento name son

opcionales.

Fuente:

http://php.net/manual/es/function.setcookie.php

2. ¿Cómo se crean las cookies? (PARTE 2 DE 3)

Company Logo

index.php

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Ejercicio</title>

</head>

<body>

<form action="cookie.php" method="POST">

Nombre:<input type="text" name="cliente"/>

<input type="submit" value="Enviar!!"/>

</form>

</body>

</html>

<?php

$cliente=$_POST['cliente'];

setcookie('Cliente', $cliente, time()+4800);

?>

cookie.php

Crear en un proyecto en el IDE que se quiera los siguientes 2 archivos, al ejecutar index.php el resultado se verá

si se visualiza la sección de cookies como en la siguiente diapositiva.

2. ¿Cómo se crean las cookies? (PARTE 3 DE 3)

Company Logo

- Esta captura corresponde al navegador Mozilla Firefox y se usó XAMPP como servidor de aplicaciones.

3. ¿Cómo leer cookies en PHP?

Company Logo

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.

En PHP 4.1.0 Se introdujo $_COOKIE,

haciendo $HTTP_COOKIE_VARS obsoleta.

Fuente:

http://php.net/manual/es/reserved.variables.cookies.php

http://www.desarrolloweb.com/articulos/cookies-en-php.html

<?php

if (isset($_COOKIE['Cliente'])){

echo 'Valor de la cookie: '.$_COOKIE['Cliente'];

}else{

echo "No hay cookies...";

}

?>

leercookie.php

4. ¿Cómo borrar cookies en PHP?

Company Logo

Se borra una cookie con la misma función setCookie asignando un tiempo negativo en expiración

de la misma.

index.php

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Ejercicio</title>

</head>

<body>

<form action="CrearCookie.php" method="POST">

Nombre:<input type="text" name="cliente"/>

<input type="submit" value="Enviar!!"/>

</form>

<a href="LeerCookie.php">Lectura de Cookie</a>

<a href="BorrarCookie.php">Borrar de Cookie</a>

</body>

</html>

<?php

$cliente=$_POST['cliente'];

setcookie('Cliente', $cliente, time()+4800);

header("location: index.php");

?>

CrearCookie.php

<?php

if (isset($_COOKIE['Cliente'])){

echo 'Valor de la cookie: '.$_COOKIE['Cliente'];

}else{

echo "No hay cookies...";

}

?>

LeerCookie.php

<?php

setcookie('Cliente','', time()-4800);

header("location: index.php");

?>

BorrarCookie.php

5. EJEMPLO: Detectar si un usuario ha regresado al sitio web o es

nuevo

Company Logo

index.php

<?php

if (isset($_COOKIE['visita']))

{

echo "Estas de regreso!";

}else{

setcookie('visita','ok',time()+31536000);

echo "Eres nuevo, el sitio te gustará";

}

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<body>

</body>

</html>

60 segundos x

60 minutos x

24 horas x

365 días = Tiempo en

segundos para un año

que se pone en la función

<?php

if (isset($_COOKIE['fechaultimavisita']))

{

$fecha_ultimavisita=$_COOKIE['fechaultimavisita'];

$datetime1 = new DateTime(DateTime::createFromFormat('Y-m-d H:i:s', $fecha_ultimavisita)->format('Y-m-d H:i:s'));

$datetime2= new DateTime(date("Y-m-d H:i:s", time()));

$interval = $datetime1->diff($datetime2);

//$diff = $interval->format('%y-%m-%d %H:%i:%s');

$anio=$interval->format('%y');

$mes=$interval->format('%m');

$dia=$interval->format('%d');

$hora=$interval->format('%H');

$minutos=$interval->format('%i');

$segundos=$interval->format('%s');

echo "<br>Estas de regreso!... tu última visita fue hace: <b>".

$anio . "</b> años, <b>".

$mes . "</b> meses, <b>".

$dia . "</b> días, <b>".

$hora . "</b> horas, <b>".

$minutos . "</b> minutos, <b>".

$segundos . "</b> segundos";

}else{

$fecha_visita=date('Y-m-d H:i:s');

setcookie('fechaultimavisita',$fecha_visita,time()+31536000);

echo "Eres nuevo, el sitio te gustará";

}

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<body>

</body>

</html>

6. EJEMPLO: Tiempo transcurrido (años, meses, días, horas, minutos

y segundos) desde la última vez que un usuario visito un website.

Company Logo

index.php

En este ejercicio se usa el

método diff para cálculo

de la diferencia, pero

sería interesante hacerlo

con otros tipos como date

o el formato

DATE_COOKIE para las

fechas en cookies

<?php

if (isset($_COOKIE['numerovisita'])){

$numerovisita=$_COOKIE['numerovisita'];

$numerovisita+=1;

setcookie('numerovisita',$numerovisita, time()+31536000);

echo "Esta es tu visita Nro.<b>".$numerovisita."</b>";

}else{

setcookie('numerovisita',0, time()+31536000);

echo "<br><b>Esta es tu visita Inicial.</b>";

}

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<body>

<?php

// put your code here

?>

</body>

</html>

7. EJEMPLO: Contador de visitas

Company Logo

index.php

Es importante volver a

usar la función setcookie

para actualizar el valor

en el browser del

navegante.

Temas relacionados:

- Tema 13: conteo con sesiones.

<?php

if(isset($_POST['color'])){

$color =$_POST['color'];

setcookie('color',$color,time()+31536000);

} else {

if(isset($_COOKIE['color']))

$color=$_COOKIE['color'];

else

$color="green";

}

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<body <?PHP echo "style='background-color:$color'";?>>

<form method="POST" action="index.php">

<label for ="color"> Escoge el color de fondo!</label>

<select name="color">

<option value="red">Rojo</option>

<option value="blue">Azul</option>

<option value="green">Verde</option>

<option value="yellow">Amarillo</option>

<option value="silver">Gris</option>

<option value="black">Negro</option>

</select>

<input type="submit"value="Elegir"/>

</form>

</body>

</html>

8. EJEMPLO: Elegir el color de una página con cookie

Company Logo

index.php

Este else evalúa cuando el

usuario ingresa por url (es

decir navegando al sitio)

El if de arriba es

específicamente para

cuando sucede el método

POST.

Este método setea el color

de la página.

9. Cookie definida como un array

Para guardar arrays en

setcookie se usa el nombre y el

índice de un array.

<?php

setcookie('color[0]',$color[0],time()+3600);

setcookie('color[1]',$color[1],time()+3600);

?>

Para leer arrays en setcookie:

<?php

echo "<br/>Primer color:

".$_COOKIE['colores']['0'];

echo "<br/>Segundo

color: ".$_COOKIE['colores']['1'];

?>

<?php

$persona=array('Robert','Moreira','33','sportage');

setcookie('usuario[nombre]',$persona[0], time()+3600);

setcookie('usuario[apellido]',$persona[1], time()+3600);

setcookie('usuario[edad]',$persona[2], time()+3600);

setcookie('usuario[carro]',$persona[3], time()+3600);

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<body>

<?PHP

foreach($_COOKIE['usuario'] as $clave => $valor){

echo "<b>$clave: </b>".$valor."<br/>";

}

?>

</body>

</html>

Son las 2 formas de leer

un array en una cookie.

index.php

10. Concepto y uso de sesiones en PHP (PARTE 1 DE 3)

El protocolo que utiliza la web (HTTP/HTTPS) es un protocolo sin estado (trata cada petición como una transacción

independiente que no tiene relación con cualquier solicitud anterior), es decir, que no guarda ninguna información

sobre conexiones anteriores: no sabe en qué página web estuviste antes ni si ya has enviado datos al sitio web. Lo

único que conoce la página web son los datos que le llegan a través de la URL.

Las formas que tiene un sitio web para propagar datos sobre un visitante son: la URL o las cookies. El problema

con ambos recursos es que son fácilmente modificables por el usuario: la URL se puede cambiar directamente en

la barra de direcciones del navegado.

Así que, para guardar datos más críticos, se necesitaba un método que no fuera modificable por los usuarios

(para evitar que, por ejemplo, un usuario autenticado se hiciera pasar por otro). Así nacieron las sesiones.

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 “Cookie ID”) o, si no se pasa una sesión, se creará

una sesión nueva.

Información sensible del usuario (cédula, nombres, tarjeta de crédito) están guardadas en el servidor y son

relacionadas en función del Cookie id.

Fuente:http://www.arumeinformatica.es/blog/sesiones-en-php-que-son-y-como-funcionan/

https://es.wikipedia.org/wiki/Protocolo_sin_estado

http://php.net/manual/es/session.examples.basic.php

Parte agregada, no encontré fuente

que lo corroborará

10. Concepto y uso de sesiones en PHP (PARTE 2 DE 3)

Fuente:http://arthusu.blogspot.com/2014/03/parte-4-seguridad-en-php.html

http://php.net/manual/es/session.configuration.php#ini.session.use-trans-sid

http://www.desarrolloweb.com/articulos/propagar-id-sesion-php.html

Una vez que la iniciamos solo

debemos llenar o leer el array

$_SESSION

Para crear una sesión

usaremos la función:

session_start()

«Administración de sesiones basadas en cookies»

El problema de este método es que no podemos estar

seguros que todos los usuarios acepten cookies de

sesión en sus navegadores.

Obtiene la PHPSESSID que esta almacenada en el

browser del cliente, como lo muestra el tema 11, y

rellena un array asociativo llamado:

$_SESSION

Rellena un array asociativo

llamado: $_SESSION

«Administración de sesiones

basadas en URL»

Consiste en enviar el

identificador en todas las URL

como parámetro, para

recoger por método GET. Es

un poco más engorroso

porque en cada URL

aparecerá el parámetro, algo

como esto:

pagina.php?PHPSESSID=8af7f

938a4ab81aa6406e3d57ea4

1081

Temas relacionados:

Tema 11: Sesión con cookie

Tema 12: Sesión con URL.

10. Concepto y uso de sesiones en PHP (PARTE 3 DE 3)

Fuente:http://arthusu.blogspot.com/2014/03/parte-4-seguridad-en-php.html

LLENAR UN ARRAY

session_start();

$_SESSION[‘nombre’]=“Antonio”;

$_SESSION[‘apellido’]=“Hidalgo”;

LEER UN ARRAY

session_start()

If(isset($_SESSION[‘nombre’])){

echo $_SESSION[‘nombre’];

}else{

echo ‘No existe el nombre en $_SESSION’;

}

Tanto para leer o para llenar el

array $_SESSION, se usa la función

session_start()

Forma de usar la aplicación

Abrir primero (Escribiendo la url en el navegador)

index.php, luego abrir index2.php.

11. EJEMPLO: GUARDAR Y LEER EN EL ARRAY $_SESSION

(Administrando la sesión con cookies)

<?php

session_start();

$_SESSION['tipoacceso']="Administrador";

?>

<?php

session_start();

if (isset($_SESSION['tipoacceso']))

echo "<br/>Se accedio a la aplicación como:

".$_SESSION['tipoacceso'];

else

echo "<br/>No se ha conseguido identificar sesión...";

?>

index.php

Forma de acceder al PHPSESSID, que relaciona la

sesión del usuario (en el navegador) con los datos

del servidor.

Temas relacionados:

- En esta diapositiva se da respuesta a

una pregunta del tema 10 ¿De donde

PHPSESSID?.

index2.php

12. EJEMPLO: GUARDAR Y LEER EN EL ARRAY $_SESSION

(Administrando la sesión con URL) - PARTE 1 DE 2

PASO 1: Para probar el ejercicio, desactivar las cookies en el browser (en mi caso use OPERA)

PASO 2: Configurar el archivo PHP.INI con lo siguiente.

Función Valor por defaultValor con el que

debe quedar

session.use_cookies Especifica si el módulo usará cookies para almacenar el id de sesión en la parte del cliente.

1 1

session.use_only_cookies Especifica si el módulo sólo usará cookies para almacenar el id de sesión en la parte del cliente. Habilitar este ajuste previene ataques que impican pasar el id de sesión en la URL. Este ajuste fue añadido en PHP 4.3.0.

1 0

session.use_trans_sidCuando session.use_trans_sid está habilidado, la función session_start() registrará un gestor de salida interno para la reescritura de URL.

0 1

Temas relacionados:

- Flujo de las sesiones

12. EJEMPLO: GUARDAR Y LEER EN EL ARRAY $_SESSION

(Administrando la sesión con URL) - PARTE 2 DE 2

PASO 3: La Aplicación

NOTA: La constante SID (que contiene el nombre de la sesión y el ID de sesión en la forma "name=ID")

imprime una cadena vacía si el ID de sesión fue establecido en una cookie de sesión apropiada, por eso es mejor usar:

echo "<br/>Antesde session start 2: ".session_id();

Y no:

echo "<br/>Antesde session start 2: ".SID;

<?php

session_start();

$_SESSION['tipoacceso']="Administrador";

echo "<a

href=index2.php?id=".htmlspecialchars(session_id()).">Acceso a

index 2 despues de crear sesión</a>";

?>

index.php

<?php

session_start();

if (isset($_SESSION['tipoacceso']))

echo "<br/>Se accedio a la aplicación como: ".$_SESSION['tipoacceso'];

else

echo "<br/>No se ha conseguido identificar sesión...";

?>

index2.php

Antes y después de este

session_start() se puede practicar

las siguientes líneas de código:

echo "<br/>Antes de session start:

".session_id();

echo "<br/>Después de session

start: ".session_id();

Estas instrucciones corroboran que se

crean las variables de sesión

Cuando ingreses a index2.php, seguramente no notaras

que el id de sesión esta en la URL, solo selecciona la URL y

aparecerá, el navegador la pone en invisible para dar

cierta seguridad.

<?php

session_start();

if (isset($_SESSION['contadorvisitas']))

$_SESSION['contadorvisitas']++;

else

$_SESSION['contadorvisitas']=0;

echo "<br> tú número de visitas es: ".$_SESSION['contadorvisitas'];

?>

13. EJEMPLO: Contador de visitas con sesiones

Company Logo

index.php La función session_start() es necesaria para crear

la sesión por primera vez o para actualizar una

sesión existente.

Por eso se pone por encima del if, no importa que

lado (verdadero o falso) es ejecute.

Temas relacionados:

- Tema 7: conteo con cookie.

14. EJEMPLO: Página de acceso con usuario y contraseña

Company Logo

index.php

BLOQUE OPCIONAL

Se ejecutará después

de la primera

autenticación fallida

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Ejercicio de autenticación</title>

</head>

<body>

<?php

if(isset($_GET['error'])){

echo "<br>Usuario o contraseña incorrectos...";

}

?>

<form action="paginaprivada.php" method="POST">

<label for="nombre"> Nombre de usuario: </label>

<input type="text" name="nombre" placeholder="Escribe

tu nombre.."/>

<label for="pass"> Contraseña: </label>

<input type="password" name="pass"/>

<br/>

<input type="submit"value="Enviar">

</form>

</body>

</html>

<?php

$usuariook="robert";

$passok="abcd";

if($_POST['nombre']==$usuariook &&

$_POST['pass']==$passok){

session_start();

$_SESSION["verificado"]="si";

echo "<br> Tienes acceso a la página privada..";

} else {

header("Location: index.php?error=si");

}

?>

paginaprivada.php

BLOQUE OPCIONAL

Esta sección es

necesaria para enviar

la variable error por

la que se pregunta en

index.php

Si la autenticación

falla entonces redirige

a index.php

Estos datos

normalmente se

obtienen de una

base de datos

15. EJEMPLO: Control de autenticación en 2 o más páginas

Company Logo

Fuente:https://www.youtube.com/watch?v=-J2i9NmXJBc

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Ejercicio de autenticación</title>

</head>

<body>

<?php

$variable= filter_input(INPUT_GET, 'errorx');

if($variable=="si")

echo "<br/>Usuario o contraseña incorrectos...";

elseif($variable=='fuera')

echo "<br/>No puedes saltarte la autenticación...";

?>

<form action="paginaprivada.php" method="POST">

<label for="nombre"> Nombre de usuario: </label>

<input type="text" name="nombre" placeholder="Escribe tu nombre.."/>

<label for="pass"> Contraseña: </label>

<input type="password" name="pass"/>

<br/>

<input type="submit"value="Enviar">

</form>

</body>

</html>

<?php

$usuariook="robert";

$passok="abcd";

if($_POST['nombre']==$usuariook && $_POST['pass']==$passok){

session_start();

$_SESSION["verificado"]="si";

echo "<br> Tienes acceso a la página privada..<br/>";

echo "<a href='paginaprivada2.php'>Acceso al contenido privado!!</a>";

} else {

header("Location: index.php?errorx=si");

}

?>

<?php

session_start();

if(isset($_SESSION['verificado'])){

echo "<br/>Esta es tu página privada<br/>";

}else{

header("Location: index.php?errorx=fuera");

}

?>

index.php paginaprivada.php

paginaprivada2.php

En un servidor real si funciona la extracción de datos de la URL con $_GET['nombrevariable'], pero en

ambientes de prueba como xampp no, por eso en este caso se usa la función filter_input.

Se debe intentar acceder por url a la paginaprivada.php y luego a paginaprivada2.php para constatar

la seguridad en el resultado de autenticación de estas 3 páginas.