Ir para conteúdo
Fórum Script Brasil
  • 0

Sessao


MTavares

Pergunta

Pessoal.

É o seguinte. Estou finalizando uma loja virtual para um cliente meu, porém estou armazenando o acesso e as compras antes de se logar através de cookies:

if(!$_COOKIE["Usuarios"]){    
        $gerarSessao = md5(strrev(rand()));
                $SessaoCliente = $gerarSessao;
                setcookie("Usuarios", $SessaoCliente,time() + 259200);
      }
E depois armazeno no banco a sessao criada $SessaoCliente. Só que quero fugir do cookie e usar sessão, pois o usuário pode estar com o cookie desabilitado, etc.... A minha idéia inicial era criar com sessões:
if(!isset($_SESSION["sessao"])){
    $gerarSessao = md5(strrev(rand()));
    $SessaoCliente = $gerarSessao;  
    $_SESSION["sessao"] = $SessaoCliente;
}

Depois, claro, armazeno no banco como estava os cookies.

Legal, ok, funciona... só que estou esbarrando na seguinte dúvida:

Quando ele se loga na loja, antes ou depois de colocar as compras no carrinho, fica mais fácil pegar a sessão, pois identifico o cliente pelo ID e crio uma nova sessão com a sessão armazenada, porém quando ele fecha o browser e não se loga, a sessão é perdida e os dados no carrinho somem (apesar de estar armazenada no banco) e quando o cliente volta, as compras desaparecem do carrinho, exatamente porque foi criada uma nova sessao. Com isso, a tabela corre o risco de ficar com lixo.

Quero contornar isso. Por ex. Na loja como o Extra (www.extra.com.br), o que ocorre? eu seleciono um produto, o produto vai para o carrinho, mesmo que eu feche o browser e volte, mesmo que não esteja logado na loja, as compras permanecem no carrinho e o legal é que quando me logo e saio da loja pelo "sair", as minhas compras também desaparecem, aparecendo depois que me logo novamente.

Alguém teria poderia me ajudar nesse raciocínio? Não preciso do código, mas apenas uma idéia de como poderia fazer isso, de preferência sem usar cookies.

Pensei em usar o IP do usuário, mas ele pode estar com IP dinâmico.....

Obrigado.

Editado por MTavares
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

você pode criar uma tabela carrinho e nela gravar os dados da session vinculada pelo usuario... assim quando ele loga ele verifica se existe algum item no carrinho se exitser retorna os dados se não cria nova session... dessa fomra se a pessoa fechar ou sair do sistema o carrinho perman-se intacto.

Link para o comentário
Compartilhar em outros sites

  • 0

beleza Jagua....

na verdade a loja já tem essa tabela.... do qual armazeno as sessões criadas, só que quando uso só a sessão, ao fechar a janela e retornar, a sessão muda e isso acaba criando lixo na tabela... então atualmente estou usando cookies conforme post anterior.... só que não quero que a loja fique refém dos cookies, já que muitos usuários podem estar com os cookies desabilitados. Eu poderia até usar uma solução em JavaScript para verificar se o cookie está ativado ou não, mas isso pode acarretar um trabalho extra para o usuário para ativar e com isso causar a desistência.....

Poderia também usar o IP como referência, mas o usuário pode estar usando IP dinâmico e também não seria 100% de certeza...

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Olá pessoal.

Bem, fiz uma solução com PHP mesmo, não sei se seria a maneira mais elegante para implementar na loja virtual, mas dessa forma me dá uma segurança se o cliente habilitou o cookie ou não, caso não tenha habilitado, será direcionado para uma página mostrando como se habilita. Na verdade não queria trabalhar com cookies, então se tiver alguém com uma outra solução, agradeço.

<?php
     if(!$_COOKIE["Usuarios"]){    
        $gerarSessao = md5(strrev(rand()));
                $SessaoCliente = $gerarSessao;
                if(setcookie("Usuarios", $SessaoCliente,time() + 259200);){
                   if(!isset($_COOKIE["Usuarios"])){
                     $_SESSION["sessao"] = $SessaoCliente;
                     exit();
                    }else{
                      $SessaoCliente = $_COOKIE["Usuarios"];  
                   }
               }
     }
?>

Abraços

Editado por MTavares
Link para o comentário
Compartilhar em outros sites

  • 0

não entendi essa de sessão muda ... porque se você deixar vinculado os dados da session['carrinho'] a id do usuario no banco a primeira coisa a fazer quando logar é verificar se na tabela do carrinho tem dados para esse usuariose tiver retorna os dados na session ... se não cria a session NULL.. e quando alguém fizer uma compra ele limpa os produtos da tabela carrinho para aquele usuario...

não sei se entendi bem mas dessa forma que estou imaginando não vejo como ficar com "lixo" na tabela.

Link para o comentário
Compartilhar em outros sites

  • 0

beleza JaguA.

Na verdade ele está funcionando da forma como você falou.... ou seja... tenho uma tabela de carrinhos aonde armazena o processo de compras do usuário e claro, um campo estrangeiro aonde armazeno também o ID do usuário e o ID do produto... quando o usuário se loga na loja, o sistema pecorre a tabela, identifica o ID do usuário e "coloca novamente no carrinho" os produtos que ele comprou.... até aqui tudo bem...

A minha preocupação estava no simples fato de não trabalhar com cookies, pois muitos usuários tem, "por questões de segurança", o cookie desabilitado, e é exatamente para esse público especiífico que fiz o código no post anterior.

Como funcionava:

O usuário entrava na loja (ainda não logado), colocava os produtos no carrinho e saía da loja sem se logar. Os produtos ficavam na tabela "sem dono". Quando o usuário voltava pelo mesmo computador e browser, conseguia ver os produtos nas compras, porém se ele retornasse de um outro computador ou browser, ele não conseguia ver, já que criava um novo Cookie.... e isso acabava criando lixo nas tabelas... a solução imediata que criei foi se dentro de 2 dias as compras permanecessem sem dono, era excluído automaticamente.

Como funciona agora:

Como a minha preocupação era realmente os cookies e pelo que vi não posso fugir deles, verifico se o cookie está ativo, se não estiver, ele gera uma sessão e armazena na loja e se tiver, ele gera também uma sessão e armazena na loja. A diferença está no simples fato do cliente estiver com o cookie desabilitado, pois quando retornar pelo mesmo browser e computador, as compras não poderão ser vistas, dessa forma e ele terá que fazer novamente a compra (no caso da compra tiver sido efetuada sem ele estiver logado logar) e se o cookie estiver ativo, vai gerar um cookie (claro :rolleyes: ) e quando ele retornar a loja pelo mesmo browser e computador, as compras continuarão no carrinho, mesmo não logado.

Quando o cliente se logar, não terei essa preocupação, já que as compras já irão ser armazenadas com o ID dele.

Um exemplo prático do que estou falando é na loja virtual do Extra. Acesse de faça duas simulações, uma com o cookie habilitado e a outra sem o cookie, claro que você terá que limpar seu cachê.... Observe que quando você fizer as compras sem o cookie e sem se logar, ao retornar o carrinho ficará novamente vazio, com o cookie ativado, as compras permanecerão no carrinho.... observe também que se você logar na loja e sair, o carrinho vai estar vazio, porém ao retornar e se logar, as compras voltarão a aparecer no carrinho.... é dessa forma que consegui colocar na loja que estou desenvolvendo..

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Agora consegui entende perfeitamente o seu problema, rsrsrs

bem realmente não tem como fugir nesse caso, mas ainda tem a questão de um computador ocm mais de um usuario o que seria chato eu entrar no site e logar ou me registrar e ele criar um carrinho para mim porque outra pesosa havia acessado anteriormente e dado uma olhada e tudo mais...

eu tenho para mim que a melhor saida é não dexar carrinho de compras funcionando caso a pessoal não esteja logado...

ou talvez até algo como exporta e importa carrinho mas é um trabalho desnecessario... enfim ...

é complicado rsrs....

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...