Eu tenho uma loja de e-commerce e tenho notado que em intervalos aleatórios os pedidos são gerados duas vezes, às vezes 3 vezes. Achei algo estranho nos logs de acesso do Apache que parece ser a causa:
SAME.IP.ADDRESS - - [08/Apr/2019:07:55:09 +0200] "POST /da/index.php?option=foo&task=orders.ajaxCheckActionPermissions HTTP/1.1" 200 218 "http://www.example.org/da/ordrer" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"
SAME.IP.ADDRESS - - [08/Apr/2019:07:55:18 +0200] "POST /da/ordrer HTTP/1.1" 303 456 "http://www.example.org/da/ordrer" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"
SAME.IP.ADDRESS - - [08/Apr/2019:07:55:20 +0200] "GET /da/ordrer HTTP/1.1" 200 13158 "http://www.example.org/da/ordrer" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"
SAME.IP.ADDRESS - - [08/Apr/2019:07:55:22 +0200] "GET /da/index.php?option=foo&task=shop.ajaxGetShoppingCart&_=1554702922260 HTTP/1.1" 200 762 "http://www.example.org/da/ordrer" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"
SAME.IP.ADDRESS - - [08/Apr/2019:07:55:18 +0200] "POST /da/ordrer HTTP/1.1" 303 456 "http://www.example.org/da/ordrer" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"
SAME.IP.ADDRESS - - [08/Apr/2019:07:55:23 +0200] "GET /da/ordrer HTTP/1.1" 200 13158 "http://www.example.org/da/ordrer" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"
SAME.IP.ADDRESS - - [08/Apr/2019:07:55:24 +0200] "GET /da/index.php?option=foo&task=shop.ajaxGetShoppingCart&_=1554702924422 HTTP/1.1" 200 761 "http://www.example.org/da/ordrer" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"
O segundo POST é o envio do formulário original e os 2 GETs seguintes estão sendo executados normalmente. No entanto, o próximo POST tem o mesmo carimbo de data/hora do POST anterior.
Eu pensei que poderia ter sido um botão de envio de formulário sendo pressionado duas vezes, mas eu tenho JS impedindo isso, sem mencionar que toda a página de checkout é alimentada por JS, então um usuário não seria capaz de concluir o processo de checkout, então não poderia ter sido um clique duplo.
Poderia ser um problema de configuração com o Apache? Ou algo totalmente diferente? Não sou muito avançado com o Apache, mas fornecerei as informações solicitadas.
Estou executando uma pilha LAMP:
- Apache 2.4
- PHP 7.0
O Apache não está enviando o POST duas vezes - ele está recebendo duas vezes. Isso é muito provavelmente um bug na parte JS do seu aplicativo.
Para diagnosticá-lo, defina uma variável global
orderSent
parafalse
o carregamento da página e, antes de enviar aPOST /da/ordrer
primeira verificação, se ainda for falsa e falhe se não, defina-a como verdadeira (novamente antes de enviar a solicitação). Isso ajuda a encontrar o bug e permite que você crie uma solução mais permanente.