Sự cố web phổ biến là nơi người dùng nhấp vào nút gửi của biểu mẫu nhiều lần để máy chủ xử lý biểu mẫu nhiều lần. Điều này cũng có thể xảy ra khi người dùng chạm vào nút quay lại đã gửi biểu mẫu và do đó nó được xử lý lại.Những phương pháp nào có sẵn để ngăn chặn nhiều postbacks của một form trong ASP.NET MVC?
Cách tốt nhất để ngăn điều này xảy ra trong ASP.NET MVC là gì?
khả năng như tôi nhìn thấy nó là:
- Vô hiệu hóa nút sau khi nộp - điều này được quanh nhiều lần nhấp chuột nhưng không phải là chuyển hướng
- Có hành động tiếp nhận chuyển hướng ngay lập tức - trình duyệt dường như rời khỏi những chuyển hướng ra về lịch sử
- Đặt một dấu hiệu duy nhất trong phiên và về hình thức - nếu chúng phù hợp xử lý theo hình thức - nếu không muốn nói rõ ràng các hình thức cho một tươi nộp
Có nhiều hơn không?
Có một số triển khai cụ thể nào trong số này không?
Tôi có thể thấy tùy chọn thứ ba được triển khai dưới dạng ActionFilter với phần mở rộng HtmlHelper theo cách tương tự với công cụ chống giả mạo.
Mong muốn được nghe từ bạn MVC'ers ngoài kia.
Ý tưởng thú vị, một điều tôi sẽ thêm là bạn nên đặt chuỗi trong một giao dịch: 1) kiểm tra nonce 2) quá trình 3) xóa nonce. Nếu bạn không làm điều này nguyên tử bạn có một điều kiện chủng tộc, nơi bài viết có thể được xử lý nhiều lần, đặc biệt. nếu quá trình xử lý mất một lúc để hoàn thành (và người dùng thiếu kiên nhẫn). Một điều tôi vẫn chưa rõ ràng là, nếu POST phát hiện một bản sao gửi, những gì cần được trả lại cho người dùng? Một trang cho biết bài đăng đang được xử lý? – DSO
Tôi sẽ xóa khóa nonce trước và sau đó thực hiện quá trình xử lý để đơn giản hóa mọi thứ. Làm thế nào để xử lý một dupe là một quyết định thiết kế và tùy thuộc vào bạn. Tuy nhiên, phản hồi mô tả về những gì vừa xảy ra sẽ giúp người dùng đánh giá cao ứng dụng web của bạn hơn nữa. – aleemb
Bạn đã từng thấy việc triển khai các khóa nonce trong ASP.NET MVC bằng cách sử dụng ActionFilters có lẽ? Tôi có thể tưởng tượng điều này sẽ làm cho việc thực hiện rất đơn giản và tái sử dụng. Nó cũng có thể sử dụng một DB hoặc chỉ đơn giản là một biến phiên. – WooWaaBob