2009-04-02 37 views
6

Tôi phải triển khai chức năng tự động đăng xuất trong một trong các dự án của mình và tôi không thể tìm ra nơi để bắt đầu tìm kiếm ý tưởng nhưng SO.Asp.net: Triển khai chức năng Tự động đăng xuất

Điều tôi cần là để ứng dụng chuyển hướng người dùng đến trang đăng nhập nếu phiên người dùng đã hết hạn. Vui lòng cho tôi biết cách tiếp cận của tôi để giải quyết yêu cầu này là gì.

Tuyên Bố Vấn đề: Nếu người dùng rời khỏi hệ thống hơn n phút trong bất kỳ trường hợp đăng nhập nhất định, hệ thống sẽ tự động đăng nhập chúng.

Trả lời

6

này đã được thực hiện bằng cách sau:

1) Tiết kiệm thời gian-tem của mọi yêu cầu (máy chủ và ajax trừ yêu cầu ajax kiểm tra phiên) đến máy chủ vào một var phiên.

2) Thăm dò máy chủ qua chức năng JS bằng cách sử dụng ajax trong khoảng thời gian thường xuyên và kiểm tra xem chênh lệch thời gian giữa dấu thời gian phiên và thời gian yêu cầu ajax lớn hơn thời gian chờ của phiên và sau đó đăng xuất khỏi người dùng hiện tại và trả về một bool cho yêu cầu ajax đó.

3) Chuyển hướng trang hiện tại tới trang đăng nhập nếu giá trị trả về là đúng.

+2

Bạn nên đánh dấu đây là câu trả lời sau đó để cứu mọi người dành thời gian cho nó –

1
+0

tôi biết trạng thái phiên nào là tôi chỉ muốn chuyển hướng người dùng đến trang đăng nhập khi hết hạn! – renegadeMind

+0

Bạn không đọc toàn bộ trang, huh! Đọc phần 'Ứng dụng trạng thái phiên mẫu' trong liên kết ở trên. Sửa đổi phương thức 'CheckSession' và thay vì dòng 'span1.InnerHtml = "NOTHING, SESSION DATA LOST!"' - thêm mã để chuyển hướng đến trang của bạn. – sangupta

0

Vì bạn không biết bắt đầu từ đâu, bạn có thể tìm thấy điều này 4guys bài viết hữu ích: http://www.4guysfromrolla.com/webtech/110701-1.shtml

Sửa

Âm thanh như jQuery timer có thể hữu ích nếu bạn muốn chuyển hướng đến một url sau một khoảng thời gian đã biết đã trôi qua (tức là khoảng thời gian hết hạn phiên của bạn).

Hy vọng điều này sẽ hữu ích.

+0

tôi biết Xác thực hoạt động; hows dat sẽ giúp tôi? Hãy hiểu rằng người dùng sẽ không tương tác với trang web của anh ấy và ứng dụng sẽ vẫn chuyển hướng trang đó đến trang đăng nhập khi phiên hết hạn! Nó sẽ là một điều phía khách hàng! – renegadeMind

+0

Có thể xem xét viết lại câu hỏi của bạn để làm cho nó rõ ràng hơn cho những người sẵn sàng dành thời gian giúp bạn. –

+0

tôi cũng nghĩ từ tự động đăng xuất là tự giải thích; đoán nó không phải là! – renegadeMind

14

Tiếp tục nhận xét nhiều như câu hỏi, tôi không chắc liệu bạn có đang theo dõi thứ gì đó sẽ đăng xuất người dùng sau một thời gian nhất định bất kể hoạt động hay chỉ sau một khoảng thời gian không hoạt động.

Nếu bạn hài lòng để sử dụng các tiêu chuẩn ASP.NET mechanisms, điều này có thể được thực hiện cho bạn mà không cần bất kỳ công việc chính:

Thiết lập membership provider của bạn.

Đảm bảo rằng bạn authentication section định nghĩa một loginUrl:

<authentication mode="Forms"> 
    <forms loginUrl="login.aspx" /> 
</authentication> 

Bạn có thể thiết lập một thời gian chờ khác hơn so với mặc định là 30 phút bằng cách sử dụng "thời gian chờ" thuộc tính trên forms element:

<authentication mode="Forms"> 
    <forms loginUrl="login.aspx" timeout="15"/> 
</authentication> 

này sẽ đăng nhập người dùng ra sau 15 phút không hoạt động trên trang web của bạn (hoặc với trình duyệt mở không có javascript "nhịp tim" hoặc nếu họ dành 15 phút trên một trang web khác).

Từ chối truy cập cho người dùng vô danh

<authorization> 
    <deny users="?" /> 
</authorization> 

Sau đó đảm bảo rằng đăng nhập, đăng ký của bạn và các trang mật khẩu có thể bị lãng quên là thể truy cập đến tất cả người dùng sử dụng location Element:

<location path="Logon.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="?"/> 
    </authorization> 
    </system.web> 
</location> 
<location path="Register.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="?"/> 
    </authorization> 
    </system.web> 
</location> 
<!-- etc --> 

Bằng cách này, khi xác thực của người dùng cookie hết hạn, chúng sẽ được chuyển hướng đến URL được chỉ định trong phần tử loginUrl của trang biểu mẫu của bạn.


Nếu bạn không sử dụng cơ chế ASP.NET chuẩn, thì có thể bạn nên triển khai mô hình loại "trang cơ sở" tốt hơn.

Tạo lớp mới kế thừa từ System.Web.UI.Page sẽ kiểm tra trạng thái đăng nhập của người dùng và nếu họ chưa đăng nhập/hết thời gian, sau đó chuyển hướng họ đến trang đăng nhập của bạn.

Trong các trang bị khóa, thay vì kế thừa từ System.Web.UI.Page, bạn kế thừa từ lớp trang cơ sở của bạn (ví dụ về loại thiết lập này để thực hiện một điều tương tự - cài đặt kiểm tra trên mỗi trang trang) có thể được nhìn thấy trong my answer here


trang đăng nhập của bạn có thể sẽ cần phải có một số khung busting JS trong nó để nhảy trở ra của iFrame:

if (top!=self.parent){ 
    top.location=self.parent.location; 
} 

Hay bạn đang nói rằng bằng cách nhấn "trở lại", họ vẫn có thể xem các trang của bạn thông qua bộ nhớ cache của trình duyệt? Trong trường hợp này bạn sẽ cần phải được chơi đùa với các tiêu đề bộ nhớ cache trên mỗi trang:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 

Ok, tốt, trong trường hợp đó bạn cũng sẽ cần một JS timer đối tượng để thực hiện một Location. thay thế trang đăng nhập của bạn - có điều này trong một điều khiển người dùng trên mỗi trang (hoặc tốt hơn nữa, trong trang chủ của bạn) để tự động chuyển hướng người dùng sau khi n phút:

<script type="text/javascript"> 
    setTimeout('location.Replace("/login.aspx")', 900000); 
</script> 

thời gian là trong mili giây, vì vậy điều này sẽ di chuyển chúng trong 15 phút, và không cần phải có toàn bộ khung công tác jQuery tại chỗ cho điều đó.

Bạn cũng có thể muốn nhìn vào thẻ meta refresh:

<meta http-equiv="refresh" content="900;url=http://example.com/login.aspx" /> 

Mà sẽ buộc các trình duyệt để làm mới đến trang đăng nhập sau 15 phút (cái này thì tính bằng giây).

+0

Đây là Tuyên bố Prob của tôi: Nếu người dùng rời khỏi hệ thống trong hơn n phút trong bất kỳ trường hợp đăng nhập cụ thể nào, hệ thống sẽ tự động đăng xuất chúng. Tôi xin lỗi nếu câu hỏi được hỏi không được đóng khung chính xác. – renegadeMind

+0

Nếu bạn đang sử dụng xác thực biểu mẫu, đặt thuộc tính hết thời gian thành "n" phút và mã thông báo xác thực sẽ hết hạn sau "n" phút không hoạt động - hoặc cửa sổ trình duyệt vẫn mở hoặc họ chuyển sang trang khác trong thời gian đó . –

+0

Tôi đã thêm một số chi tiết để bao gồm cài đặt thời gian chờ, cũng như nói về khả năng sửa đổi tiêu đề bộ nhớ cache cho các trang. –

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