2010-12-10 30 views
12

Làm cách nào tốt nhất để đăng xuất người dùng khi phiên kết thúc hoặc hết hạn?Cách đăng xuất người dùng khi phiên họp hết giờ hoặc kết thúc

Cảm ơn bạn đã được trợ giúp.

+1

Bạn có nghĩa là chỉ đơn giản là để người dùng trở thành không được xác thực hoặc thực sự chuyển hướng người dùng đến một số "Xin chào, bạn đã hết thời gian!" trang sau khi họ đã chờ quá lâu và phiên của họ đã hết hạn? – Pandincus

+0

Cả hai nếu có thể? – zSynopsis

+0

khi phiên kết thúc, yêu cầu tiếp theo họ thực hiện sẽ không được xác thực. Trong trường hợp đó, trang của bạn có thể kiểm tra điều đó khi tải trang mới. Để chuyển hướng chúng nếu chúng đã ở trên cùng một trang quá dài, bạn sẽ muốn viết javascript vào trang có bộ hẹn giờ đếm ngược bằng giá trị thời gian chờ của phiên. Khi bộ đếm thời gian truy cập chuyển hướng bằng 0, vì phiên không hợp lệ. (Kinda - một caveat là nếu họ đang duyệt trang web của bạn trong tab khác - điều đó sẽ giữ cho phiên còn sống, trong khi tab đầu tiên javascript vẫn sẽ đếm ngược) – Prescott

Trả lời

11

Nó thực sự phụ thuộc vào các chức năng mong muốn bạn đang tìm kiếm. Tôi sẽ giả sử bạn đang sử dụng FormsAuthentication.

Có hai điều riêng biệt mà bạn cần phải quan tâm: PhiênFormsAuthentication cookie. Trừ khi tôi bị nhầm lẫn, cả hai đều có thời gian chờ riêng biệt.

Nếu vấn đề bạn đang gặp phải là phiên được timed out nhưng người dùng vẫn được xác thực, bạn có thể thử một sự kết hợp các nội dung sau:

1: Đảm bảo các cookie xác thực có giá trị thời gian chờ cùng như phiên:

<authentication mode="Forms"><forms ... timeout="20" ... ><authentication> 
<sessionState ... timeout="20" ... /> 

2: Trong sự kiện Page_Load của bạn, kiểm tra xem phiên đã timed out:

if (context.Session != null && Context.Session.IsNewSession == true && 
    Page.Request.Headers["Cookie"] != null && 
    Page.Request.Headers["Cookie"].IndexOf("ASP.NET_SessionId") >= 0) 
{ 
    // session has timed out, log out the user 
    if (Page.Request.IsAuthenticated) 
    { 
     FormsAuthentication.SignOut(); 
    } 
    // redirect to timeout page 
    Page.Response.Redirect("/Timeout.aspx"); 
} 

(Xem http://www.eggheadcafe.com/articles/20051228.asp để biết thông tin về việc phát hiện thời gian chờ của phiên)

Nếu bạn muốn trải nghiệm người dùng dễ chịu hơn, bạn có thể sử dụng javascript để bắt đầu một số giao diện người dùng phương thức sau X phút. Cửa sổ bật lên này sẽ đơn giản cho phép người dùng bắt đầu một lần nhấp nút sẽ kích hoạt đăng lại AJAX trên máy chủ, do đó mở rộng xác thực và cookie phiên của họ mà không cần phải tải lại trang. Tôi chưa bao giờ thực hiện điều này trước đây nhưng nhìn, this guy made an ASP.NET AJAX control!

+0

Cảm ơn Pandincus – zSynopsis

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