Controle de Sessão

Escrito por Mario SAM

Ao customizar um template ou até mesmo na criação de algum módulo, precisamos fazer ter acesso ao gerenciamento de sessões do sistema para manipular algumas informações.

Seja para recuperar informações do cliente, valores do carrinho de compras, ou mesmo guardar alguma informação que seja relevante no decorrer da navegação.

Lembra da instalação?

Você lembra que ao instalar o Magento, em um dos passos é questionado como você deseja salvar o gerenciamento de sessão?!

As opções são: Arquivos ou Banco de Dados.

controle de sessão

Cada opção tem suas vantagens e desvantagens, cabe você decidir o que funciona melhor na sua loja.

Vale ressaltar que se você escolher banco de dados, após instalar o sistema e começar a navegar, o tamanho da sua base de dados vai aumentar mesmo que você não cadastre nenhum produto – muita gente acha estranho o banco aumentar de tamanho sem nenhum cadastro (é o controle de sessão).

O controle por arquivos é mais rápido, porém, menos seguro.

Configurações de backend

No backend do Magento podemos fazer algumas configurações para o gerenciamento de sessões. Veja em:

Sistema > Configuração > Geral > Web [Sessão Gerenciada por Cookie]

Veja que é possível informar o ciclo de vida (tempo) do cookie, e se o mesmo pode ser usado em ambiente seguro (https) – já que cookies não são considerados seguros, etc.

controle cookie sessao

São informações que ajudam aumentar a segurança do site.

Limpando a sessão

Na arquitetura de dados do Magento, quando vamos acessar a sessão devemos fazer uso de uma Singleton. Isso garante que existe apenas uma instância do objeto.

Caso contrário seria um caos. Imagine ter que controlar em qual sessão estão os seus dados. Então basta informar ao singleton qual a classe de objetos você deseja limpar e executar o comando clear.

Limpar carrinho de compras:

Mage::getSingleton('checkout/session')->clear();

Limpar dados do usuário:

Mage::getSingleton('customer/session')->clear();

Para encontrar essa função clear() e outras disponíveis na classe, acesse:

app/code/core/Mage/Checkout/Model/Session.php

Se você alterar a pasta Checkout por Customer vai encontrar a mesma classe, porém com funções distintas.

O que mais tem na sessão?

Não é só de clear que vive uma classe de sessão. Então em Customer por exemplo você encontra a função isLoggedIn que verifica se o usuário está na sessão:

Mage::getSingleton('customer/session')->isLoggedIn();

Existem outras formas de saber se o usuário está logado, como mostrado no post: Usuário está logado?

Em Checkout você já possui a função getQuote que armazena os itens do carrinho de compras. Então você poderia percorrer essa lista para verificar quais produtos foram adicionados ao carrinho, e pode remover alguns itens se necessário:

foreach( Mage::getSingleton('checkout/session')->getQuote()->getItemsCollection() as $item ) {
    Mage::getSingleton('checkout/cart')->removeItem( $item->getId() )->save();
}

Recomendo que você abra estes arquivos – de curioso mesmo – e veja as funções que estão disponíveis no sistema antes de sair criando métodos desnecessários.

Adicionando e lendo dados da sessão

É possível ainda criar novas variáveis de sessão e recuperar seus valores posteriormente, para isso precisamos apenas informar à sessão do core do sistema a variável e seu valor:

Mage::getSingleton('core/session')->setSuaVariavel('seus dados');

O prefixo “set” sempre deve existir antes do nome da sua variável. Isso indica que você está informando um novo valor.

Para recuperar essa variável você pode usar:

$seusDados = Mage::getSingleton('core/session')->getSuaVariavel();

Perceba que agora o prefixo usado foi “get”, que indica que desejamos ler o valor da variável.

Podemos ainda informar se a sessão está disponível em frontend ou backend, usando os termos “frontend” ou “adminhtml“:

Mage::getSingleton('core/session', array('name'=>'frontend'));

E com isso você já possui informações suficientes para sair trabalhando com as sessões do Magento.

Sucesso!

O Autor

Mario SAM

Desenvolvedor Magento com certificação M1 Developer e M1 FrontEnd Developer. Graduado em Web Design e Programação, pós-graduado em Gestão de Projetos e TI. Não sou matemático mas estou aqui para somar.