php防止刷新與重複提交實例程式碼

WBOY
發布: 2016-07-25 09:12:19
原創
1172 人瀏覽過

防止直接存取PHP頁面,只能引用!這樣就不能直接存取B頁了。 也可以在A加COOKIE,B判斷COOKIE後用完刪掉COOKIE 防止刷新模組 所以就考慮增加一個參數來防止這類情況的發生,COOKIE和SESSION可供選擇,不過 COOKIE是客戶端的,如果人家禁用COOKIE的話,照樣可以惡意刷新點擊數。還是用SESSION的好,IP+URL參數的MD5值做 SESSION名,我想大家也不好偽造了吧. 實作原則 設定 max_reloadtime =100; //設定頁面刷新最長間隔時間 使用者第一次開啟頁面 記錄目前的時間會儲存在 session_start 使用者第二次開啟頁面(判斷 session_start是否存在) 用當前時間和 session_start 相減 得到差值 time_passed 當 time_passed

例:

  1. session_start();
  2. $k = $_GET['k'];
  3. $t = $___GETGETGET ['t'];
  4. //防刷新時間
  5. $allowTime = 1800;
  6. $ip = get_client_ip();
  7. $allowT = md5($ip . $k . $t);
  8. if (!isset($_SESSION[$allowT])) {
  9. $refresh = true;
  10. $_SESSION[$allowT] = time();
  11. } elseif (time() - $ _SESSION[$allowT] > $allowTime) {
  12. $refresh = true;
  13. $_SESSION[$allowT] = time();
  14. } else {
  15. $refresh = false;
  16. }
  17. ?>
複製程式碼

例2,php防重複提交。 首先,可以定義一個session變數用來保存一個表單的提交序號。 這裡定義為「$userLastAction」。

然後,在表單裡加入一個 hidden變量,把值設為$userLastAction+1: > 最後,在處理提交之前判斷表單是否已被提交過:

  1. if($lastAction>$userLastAction and inputIsValid(…)){
  2. $userLastAction++; // 序號加1
  3. // 處理表單資料
  4. }
複製程式碼

投稿頁:

  1. $_SESSION['code']=mt_rand(1,1000);//產生1到1000之間的隨機器數
  2. ?>
  3. form>
複製程式碼

被提交頁:

  1. if($_SESSION['code']!=$_REQUEST['scode']){

  2. echo "請不要重複提交";
  3. exit;
  4. }
  5. $_SESSION['code']=0
  6. /* 改良版

  7. PHP防止使用者刷新頁面(Refresh or Reload),重複提交表單內容。
  8. 由於表單變數的內容由$_POST['name']引用,也許在處理完表單後,直接將$_POST['name']銷毀(unset())即可。其實不然。可能由於頁面預設對表單內容進行了緩存,所以,即使銷毀了$_POST['name'],刷新後,$_POST['name']還是會被賦值,一樣有效。
  9. 可利用Session解決。首先給Session賦個值,例如400,第一次提交成功後改變Session的值,當第二次提交時去檢查這個Session 的值,如果不是400,就不再處理表單中的資料。
  10. 可設定Session的有效時間?
  11. */
  12. if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
  13. session_start();
  14. isset($_SESSION[ 'num']) 或 die ("no session");
  15. if ($_SESSION['num']==400){
  16. print '
    '; 
    登入後複製
    登入後複製
  17. print_r($_POST);
  18. print 'Please try again';
  19. print '';
  20. $_SESSION[' num']=500;
  21. } else {
  22. print '
    '; 
    登入後複製
    登入後複製
  23. print_r($_POST);
  24. echo "However you have submitted";
  25. print '';
  26. }
  27. } else {
  28. session_start() or die("session is not started");
  29. $_SESSION['num']= 400;
  30. ?>
  31. ?>
  32. Name:
  33. Email:
  34. Beer:
  35. }
  36. ?>
複製程式碼
複製程式碼


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!