當前位置: 首頁> 最新文章列表> PHP 實現防抖功能:有效避免表單重複提交的兩種方法

PHP 實現防抖功能:有效避免表單重複提交的兩種方法

M66 2025-06-23

什麼是防抖功能及其重要性

防抖功能指的是在用戶多次快速觸發某個事件時,只允許執行一次事件處理函數,並且在最後一次觸發後的一段時間內阻止再次執行。在Web 開發中,防止用戶重複提交表單是非常重要的,因為重複提交可能導致數據冗餘、服務器負擔增加甚至邏輯錯誤。

方法一:使用Session 記錄時間戳實現防抖

一種簡單有效的方式是利用Session 記錄用戶上一次提交的時間戳,通過比較當前時間和上次提交時間的間隔,判斷是否允許繼續提交。下面的示例展示了具體實現:

// 開啟Session
session_start();
<p>// 獲取當前時間戳<br>
$currentTimestamp = time();</p>
<p>// 獲取上一次提交的時間戳<br>
$lastTimestamp = $_SESSION[&#39;lastTimestamp&#39;] ?? 0;</p>
<p>// 判斷時間間隔是否小於指定防抖時間(例如5 秒)<br>
if ($currentTimestamp - $lastTimestamp < 5) {<br>
echo &#39;請勿重複提交&#39;;<br>
exit;<br>
}</p>
<p>// 更新上一次提交時間戳<br>
$_SESSION[&#39;lastTimestamp&#39;] = $currentTimestamp;<br>

此代碼通過判斷兩次提交時間間隔是否小於設定值,避免了用戶短時間內重複提交表單。使用時請確保腳本最開始調用session_start() ,以啟用Session 支持。

方法二:使用Token 機制防止重複提交

另一種較為安全的防抖方式是使用Token。每次渲染表單時生成一個唯一的Token,保存在Session 中,並以隱藏字段形式放入表單。提交時後台驗證Token 是否匹配,從而判斷是否為重複提交。

// 開啟Session
session_start();
<p>// 生成唯一Token<br>
$token = md5(uniqid(rand(), true));</p>
<p>// 將Token 保存在Session 中<br>
$_SESSION[&#39;token&#39;] = $token;</p>
<p>// 在表單中輸出隱藏域傳遞Token<br>
echo &#39;<input type="hidden" name="token" value="' . $token . '"> &#39;;</p>
<p>// 處理表單提交時驗證Token<br>
if ($_POST[&#39;token&#39;] !== $_SESSION[&#39;token&#39;]) {<br>
echo &#39;請勿重複提交&#39;;<br>
exit;<br>
}</p>
<p>// 繼續處理表單數據<br>
// ...<br>

此方法有效防止表單被重複提交,且較難被偽造。適合需要更嚴格數據保護的場景。

總結

通過Session 時間戳控制和Token 驗證這兩種方式,PHP 開發者可以靈活實現防抖功能,有效避免用戶重複提交表單帶來的問題。具體選用哪種方案可根據實際項目需求和安全要求進行調整。希望以上示例能為您的項目開發提供實用參考。