微信浏览器提交请求,10秒自动重复提交的问题PHP

    生产上一个项目,用户提交订单,因为涉及多个接口的调用,所以响应时间肯定超过10秒。因为在数据库对订单编号做了唯一索引,结果发现大量的重复订单插入失败。开始以为是前端没有控制好,造成用户重复点击提交,做了TOKEN这些机制后,仍然发现故障存在。最终多方测试,发现只要是在手机微信端,安卓下,提交订单10秒没有返回,就会有一条提交补上来,数据完全一样。

    网上查询资料,从16年就有人发现此问题了。。。。。。。。原因就是默认情况下,请求是从 浏览器-》微信服务器-》网站   这一条线走,但是当这次请求10秒内没有响应时,微信就丢弃此次请求,马上把同样的数据,再走  浏览器-》网站  这条线走。所以我们才会发现有两次同样的请求。

    如果只是普通的获取数据这些倒还好,不过就是相当于刷新了一次,但用于数据提交时,就是坑了,巨坑啊。MMP的。

    我们的处理方案:  

    提交进入时,就以订单号为KEY,查询REDIS或是缓存,此订单号是否处于处理中,

    如果没有,就将此KEY存入,状态为处理中,然后开户PHP的 ignore_user_abort(true);(防止第一次链接被断开,PHP停止执行),继续执行代码, 执行结束时,将正常的返回数据结果存入REDIS或是缓存的KEY中。

    如果查询到此订单在处理中,就一直等待、查询REDIS或缓存中的处理状态,超时则返回错误,查询到处理结果,就取出结果返回。

    终于恢复清清净了。。。。。。。

微信浏览器微信内置的网页浏览工具,它的功能类似于其他移动浏览器。在微信浏览器中获取IP地址,通常是指获取访问者(客户端)的IP地址,这在进行网络服务开发时是常见的需求。开发者可以通过编写JavaScript代码或者服务器端代码来获取IP地址。 在前端JavaScript中,由于同源策略和隐私保护的限制,客户端脚本直接获取公网IP较为困难。但是可以通过一些间接的方法来获取,例如: 1. 通过访问一个第三方服务,该服务能够返回请求者的IP地址。客户端JavaScript可以发起一个到该服务的请求,并将返回的IP地址显示或传递给服务端。 ```javascript function getPublicIP(callback) { var XmlHttpRequest = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); XmlHttpRequest.open("GET", "http://ip.jsontest.com/", true); XmlHttpRequest.onreadystatechange = function () { if (this.readyState == 4 && this.status == 200) { var data = JSON.parse(this.responseText); callback(data.ip); } }; XmlHttpRequest.send(null); } getPublicIP(function(ip) { console.log(ip); // 打印出获取到的公网IP地址 }); ``` 2. 服务器端脚本(如PHP, Node.js等)可以直接获取客户端IP,因为服务器端不受同源策略限制。 在服务器端,获取IP相对简单,例如在PHP中可以直接通过全局数组`$_SERVER`来获取客户端IP: ```php $ip = $_SERVER['REMOTE_ADDR']; ``` 请注意,服务器端获取的IP地址是客户端与服务器之间最后一个代理服务器的IP,除非使用HTTP头部的`X-Forwarded-For`等字段,但这些字段也可能被伪造,因此需要谨慎处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值