PHP防止被重复请求接口的方法(网页端签名验证的方法)
PHP防止被重复请求接口的方法(网页端签名验证的方法)
可以采取签名验证的方式来 解决这个问题
1 time和随机数都是PHP生成的显示在前端
2 前端生成sign
3 进行每次请求的sign计数 这个是时候用redis自增 来判断一共用了10次以上就返回 请重新刷新页面
所以参数一定要静态 比方说根据可以学习微信jssdk 用appid time 随机数生成 这个必须每次刷新才能更新
<pre>
/
function getsigns()
{
$parameters = array();
$parameters['suijishu'] = getRandom(10, 5);
$parameters['time'] = time();
$sign = str_encrypt($parameters);
$newpar['suijishu']=$parameters['suijishu'];
$newpar['time']=$parameters['time'];
$newpar['sign']=$sign;
return $newpar;
}
//新版加密
function str_encrypt($parameters)
{
unset($parameters['sign']);
ksort($parameters);
$parameters['key']='myk22';
$signPars = url_build($parameters);
$signPars = trim($signPars, '&');
return strtolower(md5($signPars));
}
//新版字符串拼接
function url_build($parameters)
{
$signPars = '';
foreach ($parameters as $k => $v) {
if (isset($v)) {
$signPars .= $k . '=' . $v . '&';
}
}
return $signPars;
}
</pre>
客户端 post的3个参数都是上面getsigns()生成的
<pre>
function ajaxpost() {
$.post("/home/moban/signtest", {
"suijishu":suijishu,
"time":time,
"sign":sign,
},
function (data) {
if(data.success==1){
}else {
alert('网络繁忙');
}
}, "json");
}
</pre>
服务端
<pre>
function verifys(){
$parameters['suijishu']=$_POST['suijishu'];
$parameters['time']=$_POST['time'];
$parameters['sign']=$_POST['sign'];
if(!verify($parameters)){
echo json_encode(array('success'=>0,'msg'=>'验证签名失败'));
exit();
}
}
</pre>
验证下就好了
ps:另外 不要js生成sign 因为js代码都是暴露的 也不要通过ajax请求生成sign 这样就没意思了。。
2 采取验证码方式
PHP防止被重复请求接口的方法(网页端签名验证的方法)的更多相关文章
- 使用fiddler模拟重复请求接口
使用fiddler模拟重复请求接口 重复请求某个接口,比如评论一条,这样点击多次就可以造多个评论数据
- Java后台防止客户端重复请求、提交表单
前言 在Web / App项目中,有一些请求或操作会对数据产生影响(比如新增.删除.修改),针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱. 常见处理方案 1 ...
- 动态生成简约MVC请求接口|抛弃一切注解减少重复劳动吧
背景 目前创建一个后端请求接口给别人提供服务,无论是使用SpringMVC方式注解,还是使用SpringCloud的Feign注解,都是需要填写好@RequestMap.@Controller.@Pa ...
- webServices 使用GET请求接口方法
webServices 若要使用GET请求接口方法在Web.config 下添加这段 <webServices> <protocols> <add ...
- ASP.NET WebApi服务接口如何防止重复请求实现HTTP幂等性
一.背景描述与课程介绍 明人不说暗话,跟着阿笨一起玩WebApi.在我们平时开发项目中可能会出现下面这些情况; 1).由于用户误操作,多次点击网页表单提交按钮.由于网速等原因造成页面卡顿,用户重复刷新 ...
- C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求
C# 动态创建SQL数据库(二) 使用Entity Framework 创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...
- vue打包之后动态修改请求接口方法
1.可以根据自身情况封装获取配置文件接口信息 1.1我在static中新建一个config.json配置文件 { "DEV_URL":"/apis",//开发模 ...
- spring 注解重复(防重复请求)
1.配置拦截器 spring-mvc.xml <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/ ...
- layui之初始化加分页重复请求问题解决
layui框架中的page困扰我很久,一个页面初始化后并且分页,导致初始化渲染请求一次,分页再请求了一次,一个接口就重复请求了2次,通过不停的分析和测试,最终解决了这个问题. 基于JQ的ajax二次封 ...
随机推荐
- oracle数据库(五)
PL/SQL基础 PL/SQL语言是对oracle数据库语言的扩展,是一种高性能的基于处理事务的语言,能运行在任何oracle环境中,支持所有数据处理命令,支持所有SQL数据类型和函数,支持所有ora ...
- react native开源库管理
安装: 1,正确的安装方式是 npm install xxx --save,经常看到许多组件安装文档上后面没有 --save,如果没有建议加上 否则组件信息不会出现在package.json中,导入组 ...
- (转)虚拟文件系统(VFS)浅析
http://www.cnblogs.com/zsw-1993/p/5048144.html 在我看来, "虚拟"二字主要有两层含义: 1, 在同一个目录结构中, 可以挂载着若干种 ...
- Squeeze Excitation Module 对网络的改进分析
Squeeze-and-Excitation Networks SE-net 来自于Momenta 孙刚团队 SE的设计思路: 从卷积操作的实际作用来考虑,conv 把局部空间信息和通道信息组合起来, ...
- HDU-1848-Fibonacci again and again(SG函数,博弈)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意: 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样 ...
- 67-Flutter中高德地图插件的使用
1.注册和建立高德API应用 高德网站:https://lbs.amap.com/ 控制台-应用管理-创建应用 在创建 Key 2.获得SHA1 进入Flutter项目中的android文件夹内,打开 ...
- 验证码破解 | Selenium模拟登陆微博
模拟登陆微博相对来说,并不难.验证码是常规的5个随机数字字母的组合,识别起来也比较容易.主要是用到许多Selenium中的知识,如定位标签.输入信息.点击等.如对Selenium的使用并不熟悉,请先移 ...
- Python3.x保留字(33个)
- P1501 [国家集训队]Tree II LCT
链接 luogu 思路 简单题 代码 #include <bits/stdc++.h> #define ls c[x][0] #define rs c[x][1] using namesp ...
- 小胖的奇偶(Viojs1112)题解
原题: 题目描述 huyichen和xuzhenyi在玩一个游戏:他写一个由0和1组成的序列. huyichen选其中的一段(比如第3位到第5位),问他这段里面有奇数个1 还是偶数个1.xuzheny ...