Manipulando Cookies no Laravel

Aprenderemos nesse artigo como criar, verificar existência, obter valor e deletar.

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.

Laravel 8, cookies criptografados
Laravel 8, cookies criptografados

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.

Gunnar Correa
Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web, Especialista em Tecnologias na Educação e Pós-graduando em Segurança da Informação. Começou seus estudos na área de programação quando era criança, e atualmente, está estudando desenvolvimento de jogos. Fundador da SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.

Deixe um comentário