2009-02-26 58 views
10

Vấn đề của chúng tôi là chúng tôi có thể xóa phiên khi đăng xuất.Cách tắt nút quay lại trong trình duyệt khi người dùng đăng xuất trong asp.net C#

Nhưng nếu người dùng nhấp vào nút quay lại thì họ có thể xem tất cả các màn hình trước đó.

Nhưng lợi thế là trên một nhấp chuột duy nhất trên bất kỳ trang lướt web nào trước đó đưa người dùng đăng nhập lại trang, chúng tôi đã làm điều đó. Nhưng yêu cầu của chúng tôi là chúng ta không nên cho phép người dùng đi qua trang lướt web trước đó.

+0

kiểm tra giải pháp này. hoạt động tốt http://geekswithblogs.net/Frez/archive/2010/05/18/back-button-issue-after-logout-in-asp.net.aspx – Syed

+0

cũng tham khảo http://stackoverflow.com/a/28458499/2089963 – Syed

Trả lời

1

Bạn có thể sử dụng kiểu Outlook Web Access và chỉ cần JavaScript đóng cửa sổ/tab hiện tại.

Ngoài ra, bạn có thể đảm bảo rằng trang "đăng xuất" của bạn là đăng lại. Điều đó sẽ buộc người dùng trên nút Quay lại trong hầu hết các trình duyệt để thử đăng lại, tại thời điểm đó bạn có thể phát hiện thấy họ không còn đăng nhập và có thể chuyển hướng họ trở lại trang đăng nhập.

Chỉnh sửa: Một người khác đã đề cập đến một Response.Redirect. Bạn thực sự có thể làm cho liên kết "đăng xuất" của bạn chuyển đến trang chuyển hướng và ALWAYS chuyển hướng đến "trang đích" thứ hai. Nếu người dùng nhấp vào "Quay lại", họ sẽ truy cập lại vào chuyển hướng và đưa họ trở lại nơi họ bắt đầu.

Không có cách nào để ngăn chặn lịch sử trình duyệt vì vậy điều quan trọng là sử dụng một vài phương pháp với nhau và không lên kế hoạch cho người dùng "không đi ngược" để đảm bảo bảo mật ứng dụng của bạn.

12

Bạn cần buộc bộ nhớ cache hết hạn để tính năng này hoạt động. Tôi đang tìm mẫu mã cho bạn.

EDIT
Tìm thấy điều này cho bạn, nó đã được đề cập ở đây trên SO.

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache) 

Here...

+0

+1 chỉ cần nghĩ đến việc thêm câu trả lời này vào câu trả lời của tôi nhưng đánh tôi với câu trả lời đó! – Brandon

2

Đối với các trang ASP.NET, bạn có thể sử dụng Response.CacheControl để kiểm soát như thế nào một trang được lưu trữ trong một bộ nhớ cache người dùng. Các ngôn ngữ phát triển web khác sẽ sử dụng một cái gì đó tương tự.

7

Bạn không thể "tắt" nút quay lại. Có rất nhiều "thủ thuật" mà tôi đã thấy có thể xóa lịch sử trở lại, nhưng chúng không đáng tin cậy và chúng không hoạt động từ trình duyệt đến trình duyệt hoặc thậm chí phiên bản trình duyệt đến phiên bản trình duyệt.

Như những người khác đã nói, phương pháp đúng sẽ làm mất hiệu lực bộ nhớ cache, cùng với xác thực phía máy chủ mà phiên không còn hợp lệ nếu họ cố gắng gửi lại dữ liệu. Ngoài ra, Response.Redirect hoạt động tốt hơn so với một postback, vì điều đó gây ra một nhận được chứ không phải là một bài viết.

+0

Trong số tất cả các câu trả lời nhất định, đây là câu trả lời hoàn chỉnh và chính xác nhất, trực tiếp trả lời câu hỏi. Thật không may, tôi chỉ có một phiếu bầu. ;-) – Cerebrus

10

ghi mã này trong trang chủ trong trường hợp tải trang

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1)); 
Response.Cache.SetNoStore(); 

và viết mã này trong Trang đăng nhập trong phần đầu

<script type="text/javascript"> 
window.history.forward(-1); 
</script> 
+0

Nó không hoạt động trên thiết bị di động safari –

0

Đây là giải pháp tôi tìm thấy trên Coding Solutions

trong trang chủ

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.ClearHeaders(); 
     Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1 
     Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
     Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
     Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
     Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 
    } 

kiểm soát LoginStatus

protected void LoginStatusUser_LoggedOut(object sender, EventArgs e) 
    { 
     Session.Abandon(); 
     FormsAuthentication.SignOut(); 
    } 
Các vấn đề liên quan