2010-02-24 40 views
7

Làm cách nào tôi có thể đặt trang web ASP.Net hết hạn để nếu người dùng nhấp vào nút gửi, anh/cô ấy sẽ nhận được trang hết hạn lỗi nếu nút quay lại của trình duyệt bị đẩy để cố gắng truy cập quay lại và nhấn gửi lại?hết hạn trang ASP.Net

Trả lời

2

Trước hết, hãy sử dụng Post-Redirect-Get pattern khi người dùng gửi biểu mẫu. Điều này sẽ khiến chúng không thể sử dụng nút quay lại dễ dàng. Để thực hiện việc này, tất cả những gì bạn thực sự cần làm là phát hành cuộc gọi Response.Redirect() sau khi bạn xử lý xong biểu mẫu, ngay cả khi nó đến cùng một URL. Thứ hai, bạn có thể xem xét sử dụng một trường id duy nhất trong biểu mẫu được gắn với quá trình gửi, để nếu quá trình gửi hoàn tất, không thể sử dụng lại cùng một id. Sự phù hợp của điều này sẽ phụ thuộc vào những gì bạn đang làm mặc dù.

+0

Điều đó nghe như một đề xuất thực sự tốt nếu chúng tôi bắt đầu ứng dụng của chúng tôi từ đầu, nhưng chúng tôi có một ứng dụng hiện có mà tôi chỉ cần khắc phục nhanh, quá nhiều việc để kiến ​​trúc lại toàn bộ. –

+0

Đây là cả hai đều nói chung khá đơn giản implmentations. Bạn có nghĩa là bạn thực sự không thể thay đổi bất kỳ mã nào? – womp

+0

Chúng tôi có thể thay đổi mã, nhưng tôi đã hy vọng cho một cái gì đó giống như chỉ cần thiết lập một tài sản trong trang để vô hiệu hóa bộ nhớ đệm của trang. –

3

Sử dụng HttpResponse.Cache để kiểm soát khả năng lưu vào bộ nhớ cache của trang. Điều này cho phép bạn kiểm soát các tùy chọn như sự hết hạn của trang từ bộ nhớ cache và các tiêu đề HTTP Bộ nhớ cache kiểm soát.

+1

Tôi đã xem liên kết bạn cung cấp, nhưng không chắc chắn nơi mã đi, nếu tôi chạy nó từ chức năng Page_Load, tôi vẫn có thể nhấn nút quay lại trình duyệt để quay lại và gửi lại trang. –

+0

Tôi cũng có một trang với vấn đề này. Tôi đã đặt mọi cài đặt bộ nhớ cache mà tôi có thể tìm thấy để ngăn chặn nó, nhưng tôi vẫn có người dùng quản lý để 'quay lại' và gửi lại. Khi tôi thử nó, tôi nhận được một lỗi 'trang hết hạn', nhưng tôi cho rằng một số trình duyệt và/hoặc cài đặt bỏ qua nội dung đó và hiển thị trang từ bộ nhớ cache. Tôi có mã để ngăn chặn đệ trình thứ hai gây ra một thiệt hại, nhưng nó không ngăn chặn sự khó chịu. – Ray

0

Từ những gì tôi hiểu, có hai phần cho câu hỏi của bạn:

1 - Dừng nút trình duyệt trở lại - nó không hoạt động & tôi-nghĩ rằng chúng ta không bao giờ nên ngừng sử dụng từ cách nhấn trở lại. Vì vậy, có lẽ bạn có thể sử dụng thẻ META hết hạn nội dung để người dùng nhìn thấy một "nội dung hết hạn" trang & có để tải lại để có được những nội dung mới nhất

2 - Dừng nhiều POST - theo định nghĩa, POST không phải là indempotent tức là. nhiều hoạt động POST có thể thực hiện được. Một cơ chế có thể là vô hiệu hóa nút POST/SUBMIT sau khi bài viết đầu tiên đã hoàn thành. Vì vậy, người dùng sẽ không thể làm điều đó lần thứ hai.

HTH.

+0

Tôi không có ý định vô hiệu hóa nút quay lại, tôi chỉ muốn hết hạn trang để khi nhấn nút quay lại, người dùng nhận được thông báo lỗi "trang đã hết hạn". Tôi đã thêm một số javascript để vô hiệu hóa nút gửi trên trang gốc và hoạt động tốt trong Firefox - nút gửi vẫn bị tắt nếu người dùng nhấn nút quay lại để quay lại, nhưng trong IE 7, nếu người dùng nhấn nút quay lại trình duyệt, nút gửi trên trang gốc được bật lại. –

Các vấn đề liên quan