PHP使用session防止表單重複提交____PHP

來源:互聯網
上載者:User

在測試程式功能的時候,發現表單POST資料的時候存在一個重複提交的問題,而在每個提交頁面都使用驗證碼進行驗證使用者體驗又不太好,查閱網上的資料後發現目前解決這個問題的方法主要有以下幾種:

1、添加js驗證,防止提交重複表格單

2、提交後頁面重新導向或重新整理

3、提交後,提交按鈕變為不可用

4、加驗證碼

5、表單令牌(session)

前三種方法可以控制普通使用者正常提交,卻無法阻止惡意灌水性質的提交,驗證碼控制有時候影響使用者體驗,在這種情況下只有使用表單令牌了

1、 時間限制(驗證碼)+重新導向

前台(不做時間限制的話需要):<input type=’hidden’value=”$_SESSION[‘joininToken’]” name=’token’>

如果是對提交做時間限制,前台可以不寫代碼

<?php

$time=60; //1分鐘

If(isset($_SESSION[‘joininToken’] )){

  $tokenTime = sub_str($_SESSION[‘joininToken’],0,11);

  (time()-$tokenTime) < $time && $this->showMsg(‘提交過於頻繁’);

}  

$encode = time().MD5(random(1000,99999).’DvHgR8O4’);

$_SESSION[‘joininToken’]= $encode;

提交完成後立即重新導向

//如果有自己的加密函數可以加密和解密可以替換為以下代碼:

$encode = xxUtils::authcode(time().xxx,‘encode’,$salt,$time)

//解密

$tokenTime = str_replace(' ','+',$this->getParam('token'));

$tokenTime = xxUtils::authcode(time().xxx,‘decode’,$salt,$time);

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.