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二次封 ...
随机推荐
- 跟UI自动化测试有关的技术
大家都知道,针对UI的自动化技术一般要支持下列的东西: 1. 识别窗口 能够识别尽量多的窗口种类,支持尽量多的UI技术.比如Win32.WinForm.WPF以及WebPage(这个比较特殊,确切 ...
- UI系统综述:iOS的图形绘制、动画与runloop
一.一条业务pipeline: 一个连接核心:coreanimation 二.两个进程: 1.app进程: 2.render进程: 首先,由 app 处理事件(Handle Events),如:用户的 ...
- matplotlib双y周实例e
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport pymysqlimport warningsimp ...
- docker 空间清理
https://blog.csdn.net/qq_28001193/article/details/79555177 清理之后,重要的是找到原因,如上连接所示,其中一个占空间比较大的是日志文件,除了考 ...
- Dinner Bet Gym - 101174D (期望dp)
Problem D: Dinner Bet \[ Time Limit: 1.5 s \quad Memory Limit: 256 MiB \] 题意 题意是两个人在玩游戏,一共有\(n\)张牌,这 ...
- A1138 | 根据前序、中序生成后序
参考了博客上码量不到50行的代码,完成了这题的AC重构.感觉真的基础很重要,这题其实是很简单的一道树的前中后序的题目.但是我之前练习的时候,都是用的自己总结的骚套路,虽然理解起来很直观,但是用了动态数 ...
- x64汇编第二讲,复习x86汇编指令格式,学习x64指令格式
目录 x64汇编第二讲,复习x86汇编指令格式,学习x64指令格式 一丶x86指令复习. 1.1什么是x86指令. 1.2 x86与x64下的通用寄存器 1.3 OpCode 1.4 7种寻址方式 二 ...
- 模拟25A 题解
A. Lighthouse m的范围极小,显然的容斥. 总的方案数,减去受任意一个限制的方案数,加回受两个限制的方案数. 就能得到受所有限制的的方案数. 将选择的一些边所指向的点放在同一个联通块里. ...
- Windows版:Nginx部署React项目并访问Spring Boot后台数据
一, 打包react项目 1,在工作空间目录下create-react-app test-arrange 创建项目test-arrange 2,在新建的项目中写好请求与页面 3,打包, 在项目目录下 ...
- git rebase 多分支操作
- git rebase and git merge 区别 这一次彻底搞懂 Git Rebase - git在工作中正确的使用方式----git rebase篇 Git 操作假设Git目前只有一个分支 ...