php防止重新整理與重複提交執行個體代碼

來源:互聯網
上載者:User

防止直接存取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 < max_reloadtime 表示使用者在指定時間內頻繁重新整理了 警告後直接退出。

例子:

  1. session_start();
  2. $k = $_GET['k'];
  3. $t = $_GET['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. ?>
複製代碼

被提交頁面:

  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']) or die ("no session");
  15. if ($_SESSION['num']==400){
  16. print ‘
    ’;       
  17. print_r($_POST);
  18. print ‘Please try again’;
  19. print ‘
  20. ’;
  21. $_SESSION['num']=500;
  22. } else {
  23. print ‘
    ’;       
  24. print_r($_POST);
  25. echo "However you have submitted";
  26. print ‘
  27. ’;
  28. }
  29. } else {
  30. session_start() or die("session is not started");
  31. $_SESSION['num']= 400;
  32. ?>
  33. }
  34. ?>

複製代碼
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.