PHP usando Cookies
Las Cookies son un mecanismo para almacenar datos(data) en el navegador remoto para monitorizar o identificar a los usuarios que vuelvan al sito web. Esta es tal cual la definición que se nos da en php.net
Pero que quiere decir esto, cuando decimos navegador remoto, estamos hablando del navegador del usuario que entra a nuestra página.
Cuando dice monitorizar o identificar a los usuarios que vuelvan al sitio hemos de tener en cuenta de no poner el usuario o el password directamente, no sea bestia en esto si quiere ponga el usuario o el ID de usuario con cierta seguridad.
Recuerde que estamos trabajando con datos sensibles de otras personas muchas veces.
supongamos que ponemos el id del usuario 2728_ripolCasc393 encriptado de alguna manera, no ponga datos a lo tonto.
$_COOKIE
ya vimos lo que era $_COOKIE
antes en variables predefinidas, pero es bueno traer este tema nuevamente, ya que es un array que tiene nuestras cookies HTTP. Digámoslo de esta manera, aunque puede no ser tan correcto, PHP levanta las cookies del navegador del usuario hacia este array asociativo.
Este es el ejemplo de $_COOKIE
que da php.net
<?php echo '¡Hola ' . htmlspecialchars($_COOKIE["nombre"]) . '!'; ?>
tenga en cuenta htmlspecialchars
cuando está trabajando con la cookie antes de llamar a echo
para mostrarla en pantalla, esto es para evitar una cookie establecida con malas intenciones.
¿En este momento estarás pensando, pero yo soy quien coloco la cookie porque voy a querer convertir los caracteres especiales a HTML entities?
La verdad es que la cookie está almacenada en el navegador del ¿usuario quién dice que un usuario mal intencionado de nuestra página no va a querer sacar ventaja de esto?
Pero en este post estamos hablando de establecer una cookie y de saber si una cookie está establecida.
Para saber si una cookie está establecida podemos utilizar isset
, por ejemplo:
if(isset($_COOKIE['nombre_de_cookie'])){ //code ... } //code..
Como establecer una cookie
Para establecer una cookie podemos utilizar 2 funciones, setcookie
o setrawcookie
estas funciones te permitirán establecer una cookie. ¿Qué diferencia tienen entre ellas?
setrawcookie no hará urlencoding del valor de la cookie, esto quiere decir que por ejemplo los espacios no pasaran a ser %20 y otros simbolos no pasaran a ser %numerohexa, etc.
setcookie
Description / Descripciónsetcookie( string $name, string $value = "", int $expires = 0, string $path = "", string $domain = "", bool $secure = false, bool $httponly = false ): bool
setrawcookie
Description / Descripciónsetrawcookie( string $name, string $value = ?, int $expires_or_options = 0, string $path = ?, string $domain = ?, bool $secure = false, bool $httponly = false ): bool
Como podemos ver, los parámetros de ambas funciones so iguales, ya que las funciones realizan la misma acción.
Parametros
$name
-nombre de la cookie
$value
– valor que le ingresaremos
$expire
– el tiempo en el que la cookie expira, ten en cuenta que este valor es un timestamp, por lo tanto, deberemos utilizar la función time()+(número en segundos que deseamos que se mantenga la cookie)
en consecuencia si queremos x días time()+60*60*24*x
$path
– La ruta dentro del servidor en la que la cookie estará disponible, ejemplo: supongamos que nuestro dominio es blastcoding.com y nuestra path es programas, nuestra cookie estará disponible en blastcoding.com/programas/ solamente.
$domain
– dominio o subdomino en que la cookie estará disponible, tenga en cuenta que los hijos de estos también tendrán disponibles dicha cookie
$secure
– indica si la cookie debe transmitirse por conexión segura, su valor debe ser booleano, su valor por defecto es false
. Pero yo les recomendaría que si usas cookies a como viene estando Google exigiendo prácticamente que las páginas sean con SSL lo coloquen en true y se aseguren de que su página soporte SSL.
$httponly
– Cuando es true
la cookie será accesible sólo a través del protocolo HTTP.
Retorno
el retorno para ambas funcione es booleano. true
en caso de que la función pueda correr, false
en caso de que exista un output antes de la función.
session.gc_maxlifetime
en el archivo de configuración php.ini o mediante la funciónini_set()
en el código PHP