Không sử dụng yêu cầu GET để thực hiện sửa đổi! Hãy là RESTful; sử dụng POST (hoặc PUT) thay vì trình duyệt nên cảnh báo người dùng không tải lại yêu cầu. Chuyển hướng (using HTTP redirection) đến trang biên nhận bằng yêu cầu GET bình thường sau khi yêu cầu POST/PUT sẽ làm cho trang có thể làm mới trang mà không bị cảnh báo về việc gửi lại.
EDIT:
tôi giả sử người dùng đăng nhập bằng cách nào đó, và do đó bạn allready có một số cách để theo dõi người sử dụng, ví dụ phiên hoặc tương tự.
Bạn có thể tạo dấu thời gian (hoặc băm ngẫu nhiên, v.v.) khi hiển thị biểu mẫu lưu trữ cả hai dưới dạng trường ẩn (bên cạnh mã thông báo yêu cầu chống chéo trang web tôi chắc chắn rằng bạn đã có sẵn) và trong biến phiên (được lưu trữ an toàn trên máy chủ của bạn), khi bạn nhận được yêu cầu POST/PUT cho biểu mẫu này, bạn kiểm tra xem dấu thời gian có giống như dấu thời gian trong phiên không. Nếu có, bạn đặt dấu thời gian trong phiên làm việc cho một biến nào đó và khó đoán (dấu thời gian nối với một chuỗi ký tự bí mật), sau đó bạn có thể lưu dữ liệu biểu mẫu. Nếu ai đó lặp lại yêu cầu ngay bây giờ, bạn sẽ không tìm thấy cùng một giá trị trong biến phiên và từ chối yêu cầu.
Vấn đề với việc này là biểu mẫu không hợp lệ nếu người dùng nhấp lại để thay đổi thứ gì đó và có thể hơi khó khăn, trừ khi đó là số tiền bạn đang cập nhật. Vì vậy, nếu bạn có vấn đề với người dùng "ngu ngốc" làm mới và nhấp vào nút quay lại do đó vô tình đăng lại thứ gì đó, chỉ cần sử dụng POST sẽ nhắc họ không làm điều đó và chuyển hướng sẽ làm cho nó ít có khả năng hơn. Nếu bạn gặp vấn đề với người dùng độc hại, bạn nên sử dụng dấu thời gian quá dù đôi khi người dùng sẽ nhầm lẫn, mặc dù người dùng cố tình đăng cùng một tin nhắn nhiều lần và bạn có thể cần phải tìm cách cấm họ. Sử dụng POST, có timestam và thậm chí thực hiện so sánh toàn bộ cơ sở dữ liệu để kiểm tra các bài đăng trùng lặp, sẽ không giúp gì nếu người dùng độc hại chỉ viết kịch bản để tải biểu mẫu và gửi ngẫu nhiên rác. (Nhưng bảo vệ yêu cầu qua nhiều trang web khiến khó hơn rất nhiều)
Nguồn
2008-11-20 15:47:31
OP đang phàn nàn về người dùng của mình đang làm rối loạn hệ thống. Nói "làm cho trình duyệt của họ cố gắng và ngăn chặn chúng" là một giải pháp cho giải pháp. –
Không, nhưng nó làm cho người dùng lành tính ít có khả năng làm như vậy, tôi đã thêm một số ý tưởng để tiếp tục giảm vấn đề. –