表单令牌阻止数据重复提交
在session中存放一个特殊标志
在服务器端,生成一个唯一的标识符,将它存入session,同时将它写入表单的隐藏字段中,然后将表单页面发给浏览器,用户录入信息后点击提交,在服务器端,获取表单中隐藏字段的值,与session中的唯一标识符比较,相等说明是首次提交,就处理本次请求,然后将session中的唯一标识符移除;不相等说明是重复提交,就不再处理。
这使你的web应用有了更高级的XSRF保护。
请见如下代码:
1 <?php 2 session_start(); 3 //根据当前SESSION生成随机数 4 $code = sha1(mt_rand(0,1000000)); 5 $_SESSION['code'] = $code; 6 ?> 7 //在页面表单上将随机数作为隐藏值进行传递,代码如下: 8 <input type="hidden" name="originator" value="<?=$code?>"> 9 10 //在接收页面的PHP代码如下: 11 12 <?php 13 session_start(); 14 if(isset($_POST['originator'])) { 15 if($_POST['originator'] == $_SESSION['code']){ 16 // 处理该表单的语句,省略 17 }else{ 18 echo ‘请不要刷新本页面或重复提交表单!’; 19 } 20 } 21 ?>