Cómo guardar una cookie
Desde un controlador se pueden leer cookies usando el objeto Request y guardar o borrar cookies usando el objeto Response.
Leer una cookie
$valor = $this->request()->cookie('nombre_cookie');
También se puede indicar un valor por defecto si la cookie no existe:
$valor = $this->request()->cookie('nombre_cookie', 'valor_por_defecto');
El método devuelve el valor de la cookie como string o null si no existe y no se ha indicado valor por defecto.
Guardar una cookie
$this->response()->cookie('nombre_cookie', 'valor');
Por defecto, FacturaScripts usa el tiempo de expiración configurado en cookies_expire.
Si queremos indicar una fecha de expiración concreta, debemos pasar un timestamp:
$expire = time() + 3600; // 1 hora
$this->response()->cookie('nombre_cookie', 'valor', $expire);
La firma del método es:
$this->response()->cookie(
string $name,
?string $value,
int $expire = 0,
bool $httpOnly = true,
?bool $secure = null,
string $sameSite = 'Lax'
);
Parámetros principales:
- $name: nombre de la cookie.
- $value: valor de la cookie.
- $expire: timestamp de expiración. Si es 0, se usa la configuración cookies_expire.
- $httpOnly: si es true, la cookie no será accesible desde JavaScript.
- $secure: si es null, se detecta automáticamente si la petición usa HTTPS.
- $sameSite: política SameSite. Por defecto es Lax.
Borrar una cookie
$this->response()->withoutCookie('nombre_cookie');
Ejemplo completo
protected function execPreviousAction($action)
{
// leer cookie
$modo = $this->request()->cookie('mi_modo', 'normal');
// guardar cookie
if ($action === 'cambiar-modo') {
$nuevoModo = $this->request()->input('modo', 'normal');
$this->response()->cookie('mi_modo', $nuevoModo);
}
// borrar cookie
if ($action === 'borrar-modo') {
$this->response()->withoutCookie('mi_modo');
}
return parent::execPreviousAction($action);
}