Heim > Backend-Entwicklung > PHP-Tutorial > php 如何避免程序重复执行

php 如何避免程序重复执行

WBOY
Freigeben: 2016-06-06 20:07:08
Original
1990 Leute haben es durchsucht

如往数据库 中插入一条数据成功后跳转到下一个页面后 然后返回 又插入了一条 怎么避免

回复内容:

如往数据库 中插入一条数据成功后跳转到下一个页面后 然后返回 又插入了一条 怎么避免

<code>//表单页面
<?php session_start();
   $token = md5(uniqid());  //生成一个随机token, 直接用php的函数, 也可以自己另外实现
   $_SESSION['token'] = $token;
?>
<form>
    <input type="hidden" value="<?php echo $token; ?>">


//提交页面
session_start();
if (!isset($_SESSION['token']) || $_POST['token'] != $_SESSION['token']) {
    die('重复提交');
}
unset($_SESSION['token']);

//code..
</form></code>
Nach dem Login kopieren

那就在你的POST表单里加个一次性“凭证”呗,凭证由生成表单页面的逻辑签发,存入缓存;然后在接受POST的逻辑里检查凭证的有效性,有效则执行保存写入数据库,并清理掉这个凭证;
1.第一次请求,凭证未超时且有效,通过。
2.返回请求地址,实际是POST了一模一样的数据过去,但凭证已经被第一次清理,会检测到凭证失效。
3.多次被模拟(恶意)POST请求,凭证为前后关联,且具有时效性和一次性特点,也不会执行保存数据。

试试看,苦海无边,望君保重 - -!

添加一个时间戳凭证,读取后比对当前时间,多少秒内不反复入库。

设置一个global flag(true /false) ,然后用if 来判定这个flag 再插入。

或者提交后禁止返回

表单每次生成一个唯一且变化的token,同时生成对应的session,然后提交的时候,校验这个token。当插入数据库成功后,就清空这个session。即使重复点击,token也失效了!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage