Date post: | 22-Jan-2018 |
Category: |
Environment |
Upload: | robert-moreira |
View: | 355 times |
Download: | 3 times |
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.