Como fazer carrinho de compras sem fazer login ?

Enviada por César Oliveira 
César Oliveira
Como fazer carrinho de compras sem fazer login ?
09 de October de 2010 às 01:38AM
Olá, boa noite,

Como se faz um carrinho de compras sem estar logado ?

Poderia usar sessões, mas e se o utilizador fecha o browser e limpa os cookies ?

Não posso correr o risco de itens de um carrinho irem parar a outro carrinho

E também não convém de alguns itens ao perder a sessão ficarem perdidos na base de dados

Eu poderia gravar um id com um código UNICO num cookie
Se conseguir todos os itens que eu adicionar ao carrinho vão para uma tabela temporária do banco de dados junto com o id do cookie.
Até ai tudo bem.
Se o utilizador fechar o browser e limpar os cookies ?
Então verifico se o id existe nos cookies, como foi apagado pelo usuário não vai estar definido.
Pergunta: vou perder o vinculo nos itens que estão na base de dados ligados ao id que já existiu.
O utilizador deixa de ter os itens no carrinho, e até ai tudo bem.
Mas, e os dados que estão na tabela temporária que perderam o vinculo com o id do cookie ?

Se tudo correr bem
E se o utilizador fizer login então
Copia todos os dados dos itens associados ao id do cookie para a tabela principal (carrinho) e da-se-lhe o id do utilizador e ai já não há mais problemas.

O meu problema é com os itens perdidos que ficam na tabela temporária

Como resolvo essa situação ?

Como faço isso em segurança ?

Obrigado
Marcos Regis
Re: Como fazer carrinho de compras sem fazer login ?
09 de October de 2010 às 12:58PM
Imagine a seguinte situação.
Você vai anotar o conteúdo de ligações telefônicas separadas por pessoa. Cada pessoa em uma folha de papel.

Você recebe a ligação e começa a anotar o que esta pessoa diz. Faz isso para cada ligação.
Como tem identicador de chamadas imagina que o número pode ser usado como chave para identificar a pessoa e percebe que outras pessoas usam o mesmo número e pior, algumas pessoas que já ligaram usam outro número.
Para continuar separando por pessoas sem incomodar cada uma usa um analisador de voz que identifica cada pessoa pela voz, porém descobre que algumas pessoas ficam roucas e o analisador não consegue identificar.
Resumindo, como não há forma 100% garantida de identificar a pessoa você sempre acaba pedindo para confirmar que a pessoa do outro lado é quem você acredita ser.

É a mesma coisa com sistemas WEB.

Mesmo as sessões são identificadas usando uma chave que geralmente está em COOKIE. Se você estiver logado em um sistema qualquer e limpar os cookies é a mesma coisa que ter sido deslogado.
NUNCA USE ligação direta de um carrinho ao banco de dados. O carrinho (mesmo quando se está logado) tem que ser apenas uma lista de desejo e jamais reservar o produto mesmo quando o usuário estiver logado. A reserva deve ser feita somente no momento de concluir a compra.

Imagine agora que eu vou comprar alguns produtos e vou percorrer diversas lojas para saber qual delas tem o menor preço ou as melhoras taxas de financiamento. Eventualmente terei que chegar até o passo anterior ao da conclusão da compra para calcular custos de envio, custos de financimento, quantidade de parcelas possíveis, prazo de entrega, etc. Se a loja retirar do estoque o produto enquanto faço a pesquisa, possivelmente pode ocorrer de só haver uma unidade do item e ao invés dele estar disponivel para venda, enquanto estiver no meu carrinho vai estar indisponível e pode deixar de ser realmente vendido enquanto isso.

O meu conselho é que guarde os itens do carrinho apenas na sessão do cliente e faça log das informações. Oras, se o usuário usar outro computador neste meio tempo (coisa muito comum) vc não tem como ligar uma coisa a outra sem identificá-lo seguramente e ele não terá o carrinho persistido. O próprio sistema de sessões fará a limpeza para você.

Para esse tipo de situação o ideal é usar um sistema de sessão próprio para usuários logados (como um banco de dados) para que você possa reconstruir sessões de usuários autenticados e as sessões de usuários não logados usar o sistema de sessão comum para permitir a limpeza automática.
César Oliveira
Re: Como fazer carrinho de compras sem fazer login ?
09 de October de 2010 às 06:10PM
Não percebi

Qual deve ser o caminho ?

É possível fazer isso com segurança ?

Este site faz isso que pretendo:

http://www.laredoute.pt

Obrigado
Rubens Takiguti Ribeiro
Re: Como fazer carrinho de compras sem fazer login ?
11 de October de 2010 às 03:21AM
Outra solução é você colocar uma data de validade nestes registros e implementar um coletor de lixo. É só bolar algum mecanismo para que, de tempos em tempos, os registros expirados sejam efetivamente apagados.
Marcos Regis
Re: Como fazer carrinho de compras sem fazer login ?
12 de October de 2010 às 12:25AM
César, a url passada não serve como modelo pois é .net e não PHP (a não ser que esteja usando obscuridade via extensão).

Mesmo em .net o problema se mantém.
Eu creio ter sido muito claro sobre as alternativas passadas e explicado que NÃO EXISTE forma 100% segura de identificar o cliente.

O problema dos dados armazenados temporariamente é resolvido facilmente de diferente maneiras. Cabe a você decidir.

Procure ler bastante sobre o uso de sessões, pois ficará mais fácil para vc entender como criar um esquema de sessão baseado no login.
Você vai usar basicamente a função session_id() e session_name() para isso.
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.