Estou confuso um pouco sobre qual deve ser minha abordagem, Trabalhando em um design de carrinho de compras e preciso armazenar o carrinho de compras na sessão ou no banco de dados, mas não tenho certeza de qual abordagem seria melhor.
- O usuário não está logado e adicionando o produto ao carrinho (usuário anônimo)
- O usuário está logado e adicionando o produto ao carrinho.
O primeiro caso é mais confuso para mim, pois pode haver muitos casos em que o usuário apenas visita a loja virtual e adiciona produto sem fazer login e pode ser bem possível que ele não esteja indo para um processo de checkout.
Mas ainda precisamos criar um carrinho de compras para esse usuário. Para criar e salvar o carrinho de compras, tenho duas opções.
- Ao adicionar um produto ao usuário, crie um carrinho no banco de dados e associe esse carrinho a esse usuário. No momento em que ele estiver conectado, mova esse carrinho para o usuário conectado.
- Crie carrinho, adicione produto a ele e salve-o na sessão, quando o usuário conectado criar carrinho no banco de dados e associado usuário conectado a este carrinho com usuário.
Eu sei que tanto o sistema de carrinho orientado por banco de dados quanto a sessão podem ter aspectos positivos e negativos, mas não tenho certeza de qual pode ser a melhor abordagem para levar em conta os seguintes
- Escalabilidade
- Flexibilidade
- Extensibilidade
- Aplicação Deve cuidar da velocidade
Procurando informações sobre esse aspecto para decidir o caminho.
fonte
Respostas:
Eu buscaria uma solução em que um ID exclusivo seja atribuído a todos os visitantes quando eles acessarem o site. Não importa se eles são anônimos ou autenticados. Quando usuários anônimos se registram, mantenha o ID exclusivo.
Armazene o carrinho de compras no banco de dados. O armazenamento é barato e não deve ser um problema em termos de desempenho fazer uma consulta para o carrinho de vez em quando.
fonte
Ambos os métodos têm vantagens e desvantagens, mas, a meu ver, o armazenamento de banco de dados tem duas vantagens bastante grandes.
fonte
A questão é supor que você precise de sessões que no meu mercado de clientes não sejam necessárias. Por acaso, eu tenho várias centenas de sites de comércio eletrônico e alguns deles estão recebendo muito tráfego. Nós nunca usamos sessões porque elas não são escalonáveis, a menos que sejam criadas, pois são mais lentas ou requerem mais configuração. As sessões usam a memória e a busca do banco de dados do estado da sessão é muito lenta e requer mais partes móveis.
Em vez disso, usamos o HTML5 sessionStorage para persistir todas as informações do usuário que precisamos extrair repetidamente, mas sem a necessidade de uma nova viagem de cookies a cada vez para aumentar a largura de banda. Este é o IE8 + e todos os outros navegadores e dispositivos móveis modernos são compatíveis com esta tecnologia. MAS você pode facilmente armazenar o carrinho em um cookie como substituto, pois foi o que fizemos anteriormente. Aqui está um bom carrinho de biscoitos: http://simplecartjs.org/
Quando os usuários fazem login ou login, usamos um cookie criptografado com um carimbo de data / hora.
Também estamos avançando no uso do ApplicationCache, quando aplicável, o que reduzirá ainda mais o tráfego da Web como uma observação lateral, pois você pode buscar recursos e até catalogar dados para que a perspectiva do usuário seja um site de carregamento super rápido e o celular também funcione offline (menos transações). É claro que você deve ter cuidado para atualizar o manifesto quando os produtos mudarem etc.
fonte
Você está assumindo que o armazenamento da sessão e o armazenamento do banco de dados são exclusivos. Eles não são. Mas vamos começar assumindo que são.
A vantagem do armazenamento da sessão é três vezes:
Desvantagens do armazenamento da sessão:
Vantagens do armazenamento de banco de dados:
Desvantagens do armazenamento do banco de dados:
Você não mencionou qual plataforma está usando. Eu procuraria uma abordagem que use uma sessão baseada em banco de dados em que os dados da sessão só existam na memória durante a vida de um ciclo de solicitação / resposta, carregando-os no banco de dados e salvando-os novamente no banco de dados. Isso me serviu bem no passado.
Vantagens de uma sessão baseada em banco de dados:
Desvantagens de uma sessão suportada por banco de dados:
Há uma terceira possibilidade, na qual alguém abordou anteriormente. Você pode ignorar completamente o uso de sessões e usar o armazenamento do lado do cliente incorporando tudo em um cookie ou em um armazenamento local html.
Deixarei os prós / contras disso como um exercício para você, mas darei uma dica de que, para o armazenamento html5, a compatibilidade do navegador pode ser algo a ser analisado cuidadosamente.
Eu descrevi os fatos para você. Espero que isso ajude você a tomar a decisão certa para sua situação.
fonte
Vamos considerar os dois casos de uso que você mencionou
Nesse caso, você definitivamente deseja salvar as informações do carrinho do usuário em uma sessão para atender bem ao usuário durante sua sessão. Se ele / ela decidir fazer login / criar uma conta, você pode lidar com isso com base no próximo caso de uso. Se ele / ela não efetuar login, você não precisará preencher seu banco de dados com as informações deste usuário convidado, pois elas foram usadas apenas para servir o convidado durante a sessão. Esses dados podem ser manipulados sem estado, ou seja, o estado não é salvo de uma sessão para outra.
Nesse caso, você pode lidar com isso da mesma maneira que acima (sites de comércio eletrônico da velha escola) e também adicionar essas informações ao banco de dados e associá-las ao usuário. Isso é usado principalmente para fornecer informações de estado (estado salvo de sessão para sessão), como "Histórico de navegação do produto", "Recomendações" etc., por exemplo, semelhante ao Amazon.com.
Coisas para pensar:
fonte
Vá para a sessão quando o usuário não estiver logado. Mesmo quando logado, crie o carrinho na sessão primeiro e persista no banco de dados somente quando o usuário efetuar logout ou o tempo limite da sessão expirar.
Você precisa verificar o número de carrinhos criados na sessão.
fonte