Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos!
Estou desenvolvendo uma loja virtual e cheguei a seguinte dúvida.
Descrevendo melhor como funciona, os produtos da loja e suas quantidades no estoque estão todos gravados em banco de dados. Quando o usuário acessa o site e decide acrescentar algum produto no carrinho de compras, este é criado através de um objeto e armazenado em SESSION (observe que o usuario não precisa estar logado no site). Dessa forma, quando o usuario fecha o browser, a sessão é encerrada.
Só que é daí que surge o problema. Quando um usuário adiciona um produto no carrinho (lembrando que adicionar no carrinho não significa comprar), eu gravo no banco de dados a quantidade X de produtos que o usuário escolheu. Daí então a quantidade final do produto disponível é a quantidade no estoque menos o que foi adicionado no carrinho. A ideia aqui é evitar o problema de dois usuários adicionarem o mesmo produto em seus carrinhos e as quantidades escolhidas ficarem maior que o disponivel no estoque.
Mas, se o usuário decide sair do site sem comprar nada, os produtos que estavam no carrinho do dito cujo devem voltar pro estoque e é isso o que eu não to conseguindo fazer.
Pensei em usar na sessão a função session_set_save_handler e implementei o seguinte exemplo pra debugar:
function open() {
global $fileHandler;
$fileHandler = fopen("session.log","a");
fwrite($fileHandler, "SESSION OPEN: ".session_id()."\n");
return true;
}
function close() {
global $fileHandler;
fwrite($fileHandler, "\tSESSION CLOSE: \n");
// fclose($fileHandler);
return true;
}
function read() {
global $fileHandler;
fwrite($fileHandler, "\tread\n");
return true;
}
function write() {
global $fileHandler;
fwrite($fileHandler, "\twrite\n");
return true;
}
function destroy() {
global $fileHandler;
fwrite($fileHandler, "\tSESSION DESTROY: ".session_id()."\n");
return true;
}
function gc() {
global $fileHandler;
fwrite($fileHandler, "\tCOLETANDO LIXO\n");
return true;
}
session_set_save_handler("open","close","read","write","destroy","gc");
session_start();
De inicio, eu achei que quando o browser fosse fechado, a sessão seria destruída e a função "destroy" chamada (daí eu poderia fazer a conexão com o banco de dados e voltar pro estoque os produtos que estavam no carrinho do usuário). Mas isso não acontece e acho que é porque a sessão não é destruída quando o browser é fechado (acho que ela ainda existe no servidor, mas com o browser do cliente fechado, ela não é acessada).
Alguem sabe me dizer se do jeito que estou fazendo dá certo?
Senão, alguem pode me indicar uma maneira melhor pra devolver os itens do carrinho de volta pro estoque?
vlw!! http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif
Carregando comentários...