Traducciones: English
Biblioteca PHP para el manejo de cookies.
- Requisitos
- Instalación
- Clases disponibles
- Excepciones utilizadas
- Uso
- Sobre la caducidad de las cookies
- Tests
- Tareas pendientes
- Registro de Cambios
- Contribuir
- Patrocinar
- Licencia
-
Sistema operativo: Linux.
-
Versiones de PHP: 8.1 | 8.2 | 8.3.
La mejor forma de instalar esta extensión es a través de Composer.
Para instalar PHP Cookie library, simplemente escribe:
composer require josantonius/cookie
El comando anterior sólo instalará los archivos necesarios, si prefieres descargar todo el código fuente puedes utilizar:
composer require josantonius/cookie --prefer-source
También puedes clonar el repositorio completo con Git:
git clone https://github.com/josantonius/php-cookie.git
Josantonius\Cookie\Cookie
Establece las opciones de las cookies:
/**
* Opciones:
*
* domain: Dominio para el que estará disponible la cookie.
* expires: Cuándo expirará la cookie.
* httpOnly: Si la cookie sólo estará disponible a través del protocolo HTTP.
* path: Ruta para la que estará disponible la cookie.
* raw: Si la cookie se enviará como una cadena sin procesar.
* sameSite: Impone el uso de una política samesite laxa o estricta.
* secure: Si la cookie sólo estará disponible a través del protocolo HTTPS.
*
* Estos ajustes se utilizarán para crear y eliminar cookies.
*
* @throws CookieException if $sameSite value is wrong.
*
* @see https://www.php.net/manual/en/datetime.formats.php for date formats.
* @see https://www.php.net/manual/en/function.setcookie.php for more information.
*/
public function __construct(
private string $domain = '',
private int|string|DateTime $expires = 0,
private bool $httpOnly = false,
private string $path = '/',
private bool $raw = false,
private null|string $sameSite = null,
private bool $secure = false
);
Establece una cookie por nombre:
/**
* @throws CookieException si las cabeceras ya han sido enviadas.
* @throws CookieException si falla el análisis de la cadena de fecha/hora.
*/
public function set(
string $name,
mixed $value,
null|int|string|DateTime $expires = null
): void;
Establece varias cookies a la vez:
/**
* Si las cookies existen se sustituyen, si no existen se crean.
*
* @throws CookieException si las cabeceras ya han sido enviadas.
*/
public function replace(
array $data,
null|int|string|DateTime $expires = null
): void;
Obtiene una cookie por su nombre:
/**
* Opcionalmente define un valor por defecto cuando la cookie no existe.
*/
public function get(string $name, mixed $default = null): mixed;
Obtiene todas las cookies:
public function all(): array;
Comprueba si existe una cookie:
public function has(string $name): bool;
Elimina una cookie por su nombre y devuelve su valor:
/**
* Opcionalmente define un valor por defecto cuando la cookie no existe.
*
* @throws CookieException si las cabeceras ya han sido enviadas.
*/
public function pull(string $name, mixed $default = null): mixed;
Borra una cookie por su nombre:
/**
* @throws CookieException si las cabeceras ya han sido enviadas.
* @throws CookieException si falla el análisis de la cadena de fecha/hora.
*/
public function remove(string $name): void;
Josantonius\Cookie\Facades\Cookie
Establece las opciones de las cookies:
/**
* Opciones:
*
* domain: Dominio para el que estará disponible la cookie.
* expires: Cuándo expirará la cookie.
* httpOnly: Si la cookie sólo estará disponible a través del protocolo HTTP.
* path: Ruta para la que estará disponible la cookie.
* raw: Si la cookie se enviará como una cadena sin procesar.
* sameSite: Impone el uso de una política samesite laxa o estricta.
* secure: Si la cookie sólo estará disponible a través del protocolo HTTPS.
*
* Estos ajustes se utilizarán para crear y eliminar cookies.
*
* @throws CookieException if $sameSite value is wrong.
*
* @see https://www.php.net/manual/en/datetime.formats.php for date formats.
* @see https://www.php.net/manual/en/function.setcookie.php for more information.
*/
public static function options(
string $domain = '',
int|string|DateTime $expires = 0,
bool $httpOnly = false,
string $path = '/',
bool $raw = false,
null|string $sameSite = null,
bool $secure = false
): void;
Establece una cookie por nombre:
/**
* @throws CookieException si las cabeceras ya han sido enviadas.
* @throws CookieException si falla el análisis de la cadena de fecha/hora.
*/
public static function set(
string $name,
mixed $value,
null|int|string|DateTime $expires = null
): void;
Establece varias cookies a la vez:
/**
* Si las cookies existen se sustituyen, si no existen se crean.
*
* @throws CookieException si las cabeceras ya han sido enviadas.
*/
public static function replace(
array $data,
null|int|string|DateTime $expires = null
): void;
Obtiene una cookie por su nombre:
/**
* Opcionalmente define un valor por defecto cuando la cookie no existe.
*/
public static function get(string $name, mixed $default = null): mixed;
Obtiene todas las cookies:
public static function all(): array;
Comprueba si existe una cookie:
public static function has(string $name): bool;
Elimina una cookie por su nombre y devuelve su valor:
/**
* Opcionalmente define un valor por defecto cuando la cookie no existe.
*
* @throws CookieException si las cabeceras ya han sido enviadas.
*/
public static function pull(string $name, mixed $default = null): mixed;
Borra una cookie por su nombre:
/**
* @throws CookieException si las cabeceras ya han sido enviadas.
* @throws CookieException si falla el análisis de la cadena de fecha/hora.
*/
public static function remove(string $name): void;
use Josantonius\Cookie\Exceptions\CookieException;
Ejemplos de uso de esta biblioteca:
use Josantonius\Cookie\Cookie;
$cookie = new Cookie();
use Josantonius\Cookie\Facades\Cookie;
Cookie::options();
use Josantonius\Cookie\Cookie;
$cookie = new Cookie(
domain: 'example.com',
expires: time() + 3600,
httpOnly: true,
path: '/foo',
raw: true,
sameSite: 'Strict',
secure: true,
);
use Josantonius\Cookie\Facades\Cookie;
Cookie::options(
expires: 'now +1 hour',
httpOnly: true,
);
use Josantonius\Cookie\Cookie;
$cookie = new Cookie();
$cookie->set('foo', 'bar');
use Josantonius\Cookie\Facades\Cookie;
Cookie::set('foo', 'bar');
use Josantonius\Cookie\Cookie;
$cookie = new Cookie();
$cookie->set('foo', 'bar', time() + 3600);
use Josantonius\Cookie\Facades\Cookie;
Cookie::set('foo', 'bar', new DateTime('now +1 hour'));
use Josantonius\Cookie\Cookie;
$cookie = new Cookie();
$cookie->replace([
'foo' => 'bar',
'bar' => 'foo'
]);
use Josantonius\Cookie\Facades\Cookie;
Cookie::replace([
'foo' => 'bar',
'bar' => 'foo'
], time() + 3600);
use Josantonius\Cookie\Cookie;
$cookie = new Cookie();
$cookie->replace([
'foo' => 'bar',
'bar' => 'foo'
], time() + 3600);
use Josantonius\Cookie\Facades\Cookie;
Cookie::replace([
'foo' => 'bar',
'bar' => 'foo'
], time() + 3600);
use Josantonius\Cookie\Cookie;
$cookie = new Cookie();
$cookie->get('foo'); // null si la cookie no existe
use Josantonius\Cookie\Facades\Cookie;
Cookie::get('foo'); // null si la cookie no existe
use Josantonius\Cookie\Cookie;
$cookie = new Cookie();
$cookie->get('foo', false); // false si la cookie no existe
use Josantonius\Cookie\Facades\Cookie;
Cookie::get('foo', false); // false si la cookie no existe
use Josantonius\Cookie\Cookie;
$cookie = new Cookie();
$cookie->all();
use Josantonius\Cookie\Facades\Cookie;
Cookie::all();
use Josantonius\Cookie\Cookie;
$cookie = new Cookie();
$cookie->has('foo');
use Josantonius\Cookie\Facades\Cookie;
Cookie::has('foo');
use Josantonius\Cookie\Cookie;
$cookie = new Cookie();
$cookie->pull('foo'); // null si el atributo no existe
use Josantonius\Cookie\Facades\Cookie;
Cookie::pull('foo'); // null si el atributo no existe
use Josantonius\Cookie\Cookie;
$cookie = new Cookie();
$cookie->pull('foo', false); // false si el atributo no existe
use Josantonius\Cookie\Facades\Cookie;
Cookie::pull('foo', false); // false si el atributo no existe
use Josantonius\Cookie\Cookie;
$cookie = new Cookie();
$cookie->remove('foo');
use Josantonius\Cookie\Facades\Cookie;
Cookie::remove('foo');
-
El parámetro expires utilizado en varios métodos de esta biblioteca acepta los siguientes tipos:
int|string|DateTime
.-
Enteros
se manejarán como tiempo en unix excepto el cero. -
Cadenas
se manejarán como formatos de fecha/hora. Ver Formatos de fecha y hora soportados para más información.$cookie = new Cookie( expires: '2016-12-15 +1 day' );
Sería similar a:
$cookie = new Cookie( expires: new DateTime('2016-12-15 +1 day') );
-
Los objetos
DateTime
serán utilizados para obtener el tiempo en unix.
-
-
Si el parámetro expires se utiliza en los métodos
set
oreplace
, se utilizará este en lugar del valor de expires establecido en las opciones de la cookie.$cookie = new Cookie( expires: 'now +1 minute' ); $cookie->set('foo', 'bar'); // Caduca en 1 minuto $cookie->set('bar', 'foo', 'now +8 days'); // Caduca en 8 días $cookie->replace(['foo' => 'bar']); // Caduca en 1 minuto $cookie->replace(['foo' => 'bar'], time() + 3600); // Caduca en 1 hora
-
Si el parámetro expires pasado en las opciones es una cadena de fecha/hora, se formateará cuando se utiliza el método
set
oreplace
y no cuando se establecen las opciones.$cookie = new Cookie( expires: 'now +1 minute', // Todavía no se formateará como tiempo unix ); $cookie->set('foo', 'bar'); // Se formateará ahora y expirará en 1 minuto
Para ejecutar las pruebas necesitarás Composer y seguir los siguientes pasos:
git clone https://github.com/josantonius/php-cookie.git
cd php-cookie
composer install
Ejecutar pruebas unitarias con PHPUnit:
composer phpunit
Ejecutar pruebas de estándares de código con PHPCS:
composer phpcs
Ejecutar pruebas con PHP Mess Detector para detectar inconsistencias en el estilo de codificación:
composer phpmd
Ejecutar todas las pruebas anteriores:
composer tests
- Añadir nueva funcionalidad
- Mejorar pruebas
- Mejorar documentación
- Mejorar la traducción al inglés en el archivo README
- Refactorizar código para las reglas de estilo de código deshabilitadas (ver phpmd.xml y phpcs.xml)
Los cambios detallados de cada versión se documentan en las notas de la misma.
Por favor, asegúrate de leer la Guía de contribución antes de hacer un pull request, comenzar una discusión o reportar un issue.
¡Gracias por colaborar! ❤️
Si este proyecto te ayuda a reducir el tiempo de desarrollo, puedes patrocinarme para apoyar mi trabajo 😊
Este repositorio tiene una licencia MIT License.
Copyright © 2016-actualidad, Josantonius