如何在PHP 中實現防手震功能,避免重複提交
#防手震功能是指在使用者連續觸發某個事件時,只執行一次事件處理函數,並且在最後一次觸發後的一段時間內不會再執行。在實際的開發中,經常會遇到使用者重複提交表單的情況,使用防手震功能可以有效地避免這種情況的發生。
在 PHP 中實作防手震功能的方法有很多,以下我將介紹一種常用的實作方式,並給出具體的程式碼範例。
// 开启 Session session_start(); // 获取当前时间戳 $currentTimestamp = time(); // 获取上一次提交的时间戳 $lastTimestamp = $_SESSION['lastTimestamp'] ?? 0; // 判断时间间隔是否小于指定的防抖时间(例如5秒) if ($currentTimestamp - $lastTimestamp < 5) { echo '请勿重复提交'; exit; } // 更新上一次提交的时间戳 $_SESSION['lastTimestamp'] = $currentTimestamp;
在這個範例中,我們使用了 Session 來記錄上一次提交的時間戳記。透過比較目前時間戳記和上一次提交的時間戳,判斷時間間隔是否小於指定的防手震時間(例如5秒)。如果時間間隔小於防手震時間,就可以認為是重複提交,直接輸出提示訊息並結束腳本執行。
要注意的是,為了能夠使用 Session,我們需要在腳本的開頭呼叫 session_start()
函數來開啟 Session。
另一種常用的防重複提交的方式是使用 Token。在每次提交表單時,產生一個唯一的 Token,並將 Token 保存在 Session 或表單隱藏域中。在背景處理表單提交時,先驗證 Token 是否有效,如果有效則繼續處理,否則輸出提示訊息。
以下是一個使用Token 進行防重複提交的範例程式碼:
// 开启 Session session_start(); // 生成一个唯一的 Token $token = md5(uniqid(rand(), true)); // 将 Token 保存在 Session 中 $_SESSION['token'] = $token; // 在表单中输出隐藏域,将 Token 传递给后台 echo '<input type="hidden" name="token" value="' . $token . '">'; // 处理表单提交 if ($_POST['token'] !== $_SESSION['token']) { echo '请勿重复提交'; exit; } // 继续处理表单数据 // ...
在這個範例中,我們在每次提交表單時產生一個唯一的Token,並將Token 保存在Session中。在前端表單中透過隱藏網域的方式將 Token 傳遞給後台。在背景處理表單提交時,先驗證從表單中取得的 Token 是否與 Session 中儲存的 Token 相等,如果不相等則認為是重複提交,直接輸出提示資訊並結束腳本執行。
綜上所述,透過使用 Session 或 Token,我們可以在 PHP 中實現防手震功能,避免重複提交。根據具體的需求和場景,選擇合適的方式來實現。以上是兩種常用的實作方式,並給出了具體的程式碼範例供參考。希望對大家有幫助。
以上是如何在 PHP 中實現防手震功能,避免重複提交的詳細內容。更多資訊請關注PHP中文網其他相關文章!