Session trong PHP có thể được dùng để ngăn chèn nhiều lần khi gửi biểu mẫu. Session PHP thiết lập một biến session (ví dụ $_SESSION['posttimer']) lưu trữ timestamp hiện tại khi có yêu cầu POST. Trước khi xử lý biểu mẫu trong PHP, biến $_SESSION['posttimer'] được kiểm tra sự tồn tại và chênh lệch timestamp cụ thể (ví dụ 2 hoặc 3 giây). Cách này giúp xác định và loại bỏ các lần chèn trùng lặp thực sự.
Biểu mẫu đơn giản:
// form.html
<form action="my_session_file.php" method="post">
<input type="text" name="bar" />
<input type="submit" value="Lưu">
</form>
Tệp 'my_session_file.php' tham chiếu ở trên sẽ có đoạn mã sau:
Ví dụ
if (isset($_POST) && !empty($_POST)) {
if (isset($_SESSION['posttimer'])) {
if ((time() - $_SESSION['posttimer']) <= 2) {
// ít hơn 2 giây kể từ lần POST cuối
} else {
// nhiều hơn 2 giây kể từ lần POST cuối
}
}
$_SESSION['posttimer'] = time();
}
Kết quả
Đoạn mã trên sẽ cho kết quả sau:
Dữ liệu biểu mẫu gửi đi duy nhất.
Biến session posttimer được thiết lập và khi có chênh lệch thời gian 2 giây hoặc ít hơn trước thao tác POST cuối, nó có thể bị loại bỏ. Ngược lại, nó được lưu trữ. Hàm time() được gọi và giá trị được gán cho biến session posttimer.