Cookies é um mecanismo para salvar informações no navegador de Internet do cliente, possibilitando a consulta e manipulação sem maiores dificuldades. É através dos cookies que é possível saber as preferências dos usuários, como não exibir um modal, alterar para o modo escuro, entre outros.
Existem inúmeras formas de trabalhar com Cookies no Laravel, nesse artigo nós vamos utilizar a classe Illuminate\Support\Facades\Cookie com seus respectivos métodos de manipulação.
Removendo criptografia de Cookies
Antes de partirmos para a prática, é importante que você saiba que os valores dos cookies ficam armazenados de forma criptografada, impossibilitando a leitura do seu valor por nós humanos e outras aplicações.
Caso você necessite obter os valores em sua forma real, como, por exemplo, obter os valores no Javascript para a sua manipulação, será necessário inserir o nome do cookie a uma lista de exclusão.
Acessando o Middleware EncryptCookies que está disponível em app\Http\Middleware\EncryptCookies.php, insira o nome do cookie no array $except, conforme o exemplo abaixo.
protected $except = [
'cookie_name'
];
Na imagem abaixo você pode observar que temos dois cookies, sendo um chamado de other_cookie com seu valor criptografado, enquanto o outro, chamado de cookie_name, apresenta seu valor real, pois está na lista do Middleware.
Manipulando cookies
Vamos programar alguns exemplos, um para criar, obter seu valor, verificar se o registro existe e outro para deletar. Ainda no nosso exemplo, criamos uma controladora chamada de CookieController e três rotas como pode ser observado no código abaixo.
Route::prefix('cookie')->group(function () {
Route::get('set', [CookieController::class, '_setCookie']);
Route::get('get', [CookieController::class, '_getCookie']);
Route::get('delete', [CookieController::class, '_deleteCookie']);
});
Acessamos as seguintes rotas para cada ação:
- http://127.0.0.1:8000/cookie/set
- http://127.0.0.1:8000/cookie/get
- http://127.0.0.1:8000/cookie/delete
Antes de criar nossos métodos, é importante definir o use do namespace correto, conforme o código a seguir.
use Illuminate\Support\Facades\Cookie;
Para fins didáticos e evitar conflitos, nomeamos nossos métodos com o underline antes, mas esse não é um requisito para a utilização da classe Cookie. Veja nosso exemplo completo abaixo.
/**
* Cria um novo Cookie
*
* @return void
*/
public function _setCookie()
{
Cookie::queue('cookie_name', 'My Laravel Cookie', 3);
Cookie::queue('other_cookie', 'Other Laravel Cookie', 3);
}
/**
* Verifica se um Cookie existe e retorna o seu valor
*
* @return void
*/
public function _getCookie()
{
if (Cookie::has('cookie_name')) {
$cookieValue = Cookie::get('cookie_name');
return response()->json($cookieValue);
}
return response()->json('Cookie not exists');
}
/**
* Remove um Cookie
*
* @return void
*/
public function _deleteCookie()
{
Cookie::queue(Cookie::forget('cookie_name'));
}
Vamos entender os quatros métodos da classe Cookie utilizados no exemplo acima.
- queue - passamos a chave de acesso, seu valor e o tempo de expiração em minutos. Veja que criamos dois cookies, um deles está assinado na lista de exceção e o outro não, conforme explicado no início do artigo;
- has - informamos o nome da chave de acesso, caso o cookie exista, então retorna o valor true, do contrário, retorna false;
- get - informamos o nome da chave de acesso, caso o cookie exista, então retorna o seu valor, do contrário, retorna null;
- forget - para expirar um cookie, passamos o queue como parâmetro para esse método.
Você pode obter mais exemplos de métodos em https://laravel.com/api/8.x/Illuminate/Cookie/CookieJar.html.
Finalizamos por aqui, até a próxima.