Quando o Magento usa sessões e quando cookies?

9

Eu sei que o Magento tem as seguintes funções principais para manipulação de sessão e cookie:

Mage::getSingleton('core/cookie');
Mage::getSingleton('core/session');

Quando o Magento define Cookies e quando o PHP Sessions? Quais são os casos de uso?

Estou um pouco confuso, porque eu sei Magento armazena as informações de carrinho em Mage::getSingleton('checkout/session')eo status do usuário na Mage::getSingleton('customer/session'). Mas a sessão de checkout não parece ser uma sessão, mas um cookie. Porque quando fecho o navegador e reabra a página, os itens ainda estão no carrinho.

Isso significa que o checkout/sessionmodelo define cookies e não a $_SESSIONvariável global ?

Rouzbeh
fonte

Respostas:

14

Não, isso significa que as sessões são mantidas com um cookie, que contém o ID da sessão. A única alternativa no PHP é um parâmetro de URL como ?SID=d41d8cd98f00b204e9800998ecf8427eonde d41d8cd98f00b204e9800998ecf8427eestá o ID da sessão.

Em resumo, os dados da sessão são armazenados no servidor, mas como o HTTP é sem estado, é necessário um cookie ou parâmetro com o ID da sessão para identificar a sessão correta.

O Magento define dois cookies de sessão, adminhtmlpara o back-end e frontendpara o front-end. Modelos de sessão como 'checkout/session'armazenam seus dados em um "espaço para nome", ou seja $_SESSION['checkout'].

Os cookies não relacionados à sessão que o Magento define, por exemplo, são os storecookies que se lembram, que armazenam a visualização que você navega atualmente.

Fabian Schmengler
fonte
0

Mage::getSingleton('checkout/session')Salva todos os dados selecionados no Flatsexemplo de tabelas. sales_flat_quote sales_flat_quote_addresse mais.

O que é isso: todo cliente em sua primeira visita recebe um quote_idque é único e uma relação com dados em outras quotetabelas e é persistente, é por isso que você sempre pode ver seu carrinho. Esses dados sempre que você altera o carrinho, os dados e algo no formulário de pagamento antes de concluir um pedido. Depois de concluir seu pedido, todos os dados da cotação são obtidos e salvos nas ordertabelas ep. sales_order_itemse seus dados de cotação obtêm um status de desativação. Isso acontece sempre que você faz e pede.

Mage::getSingleton('customer/session') tem os dados do seu cliente quando você está logado.


Espero que isso faça sentido para você. Isso pode ser mais fácil de explicar falando. A maneira como o magento gerencia seus dados é complexa e realmente boa distribuída, mas depois que você entender como os dados são gerenciados e como manipulá-los. Você fez isso Esasy cake magento.


ATUALIZAR

esta é a maneira de obter quote_idpor sessão

   $session        = Mage::getSingleton('checkout/session');
   $quote_id       = $session->getQuoteId();
Duarte
fonte
Então, isso é quote_idsalvo em uma sessão ou cookie?
Rouzbeh
em sessão. Os cookies são um mecanismo para armazenar dados no navegador remoto e, assim, rastrear ou identificar usuários que retornam.
Duarte
Isso é exatamente o que eu não entendo. A sessão expira quando eu fecho o navegador. Mas como o Magento ainda se lembra dos quote_iditens e, portanto, carrega itens ao reabrir o navegador?
Rouzbeh
Sua sessão armazena seu IP e, quando você voltar, Magento, use-o para obter seu quote_ide Magic, poderá ver seu carrinho novamente. Registradas e não registradas usuário ter uma quote_idcotação Os dados não expiram
Duarte
11
Ok, verifique isso. 1) Não conectado: você adicionou 3 produtos ao carrinho, e os dados são salvos sales_flat_quotese você remover os cookies e o cache. Seus dados são perdidos e seu carrinho ficará vazio. Portanto, para os usuários não registrados, seu token é baseado em cookies e cache. 2) Registrado: Mesmos 3 produtos no carrinho E você limpa os cookies e o cache do navegador. você obtém logout, mas quando você efetua login, 3 produtos ainda estão lá. Toda essa mágica é gerenciada porquote
Duarte