我有一家电子商务商店,我注意到在随机间隔内会创建两次订单,有时甚至三次。我在 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 堆栈:
- Apache 2.4
- PHP 7.0
答案1
Apache 不是发送POST 两次 - 它是接收重复两次。这很可能是你的应用程序 JS 部分的一个错误。
要诊断它,请将全局变量设置orderSent
为false
页面加载,然后前POST /da/ordrer
如果仍然为假,则发送第一个检查,如果不是,则失败,然后将其设置为真(再次前发送请求)。这可以帮助您找到错误并允许您创建更永久的解决方案。