我有一家电子商务商店,我注意到在随机时间间隔内会创建两次订单,有时是 3 次。我在 Apache 的访问日志中发现了一些奇怪的东西,这似乎是原因:
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"
第二个 POST 是原始表单提交,后面的 2 个 GET 正常运行。但是,下一个 POST 与上一个 POST 具有相同的时间戳。
我认为这可能是一个表单提交按钮被按下了两次,但我有 JS 阻止了这种情况,更不用说整个结帐页面都由 JS 提供支持,所以用户无法完成结帐过程,所以它不可能是双击。
会不会是 Apache 的配置问题?或者完全不同的东西?我对 Apache 不是很了解,但我会按要求提供信息。
我正在运行一个 LAMP 堆栈:
- 阿帕奇 2.4
- PHP 7.0
Apache 没有发送两次 POST——它接收了两次。这很可能是应用程序 JS 部分中的错误。
要对其进行诊断,请将全局变量设置
orderSent
为false
页面加载,然后在发送第POST /da/ordrer
一次检查之前检查它是否仍然为假,如果不是则失败,然后将其设置为真(再次在发送请求之前)。这可以帮助您找到错误并允许您创建更永久的解决方案。