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二次封 ...
随机推荐
- excel双击下拉制作(以及双击下拉字符超限处理)
最近,在项目的开发过程中,遇到了一个问题,自己要修改代码中的excel模板,有些列要处理成双击下拉的形式. excel制作双击下拉: 当然,我想,这对于大家来说是不难的,好实现,但是,我在制作的过程中 ...
- Atcoder Beginner Contest 138 简要题解
D - Ki 题意:给一棵有根树,节点1为根,有$Q$次操作,每次操作将一个节点及其子树的所有节点的权值加上一个值,问最后每个节点的权值. 思路:dfs序再差分一下就行了. #include < ...
- 015_matlab运行C语言
视频教程:https://v.qq.com/x/page/q3039wsuged.html 资料下载:https://download.csdn.net/download/xiaoguoge11/12 ...
- luogu_4317: 花神的数论题
花神的数论题 题意描述: 设\(sum(i)\)表示\(i\)的二进制数中\(1\)的个数. 给定一个整数\(N\),求\(\prod_{i=1}^Nsum(i)\). 输入描述: 输入包含一个正整数 ...
- ACM数据结构-单调栈、队列
1.最大数 代码: #include <stdio.h> #include <memory.h> #include <math.h> #include <st ...
- 大厂HR面试必备ES6中的深入浅出面试题知识点
ESMAScript6简介,ES6是JavaScript语言的下一代标准,目的是让JavaScript语言可以写复杂的大型应用程序,成为企业级语言.那么ECMAScript和JavaScript的关系 ...
- python 获取文件运行路径
import os print(os.getcwd()) print("/".join(os.path.dirname(os.path.abspath(__file__)).spl ...
- RAdam VS Adam
论文解读:Radam:ON THE VARIANCE OF THE ADAPTIVE LEARNING RATE AND BEYOND 1,目的 想找到一个比较好的优化器,能够在收敛速度和收敛的效果上 ...
- ajax下post提交方式下载文件的处理(转)
ajax是不能直接下载文件的,所以一般都是通过一个超链接的形式去下载一个文件 但是当牵扯到需要发送很多数据到服务器上再下载的时候超链接的形式就有些不好看了, /*=================== ...
- 避免MySQL出现重复数据处理方法
对于常规的MySQL数据表中可能存在重复的数据,有些情况是允许重复数据的存在,有些情况是不允许的,这个时候我们就需要查找并删除这些重复数据,以下是具体的处理方法! 方法一:防止表中出现重复数据 当表中 ...