2016-09-21 15 views
6

Tôi có ứng dụng ASP.Net MVC 5, sử dụng Identity 2 để xác thực (sử dụng phần mềm trung gian xác thực cookie tiêu chuẩn, được định cấu hình với ExpireTimeSpan = 30 phút và SlidingExpiration = true).Kiểm tra xem người dùng vẫn còn đăng nhập mà không đặt lại thời gian chờ auth

Tôi đã định cấu hình xác thực để hết hạn sau 30 phút và tôi cần kiểm tra từ phía máy khách nếu người dùng vẫn đăng nhập. Tôi có thể thực hiện cuộc gọi AJAX đơn giản, nhưng nó sẽ làm mới phiên của tôi và đặt lại thời gian chờ, đó là chính xác những gì tôi muốn tránh. Sử dụng thời gian chờ 30 phút trong Javascript sẽ chỉ hoạt động nếu khách hàng chỉ có một tab mở trên ứng dụng của tôi, đó là điều tôi không thể đảm bảo.

Tôi đã suy nghĩ về việc thêm thuộc tính tùy chỉnh vào một hành động có thể kiểm tra xem xác thực vẫn hợp lệ, nhưng không đặt lại thời gian chờ. Có cách nào làm được việc này không?

Ngoài ra, điều này cũng có thể được thực hiện với phần mềm trung gian OWIN, nhưng một lần nữa, tôi không biết cách kiểm tra xác thực mà không đặt lại thời gian chờ.

+0

Trên thực tế những gì bạn sẽ làm sau khi tìm thấy người dùng được đăng nhập hay không? –

+0

Ý tưởng là chuyển hướng người dùng đến một trang khác. – Riokmij

+0

Vì vậy, nếu người dùng không đăng nhập thì bạn sẽ chuyển hướng đến một số trang. Tôi có đúng không? –

Trả lời

1

Đây là chức năng tôi sử dụng để thực hiện thành tích, mặc dù tôi chỉ sử dụng MVC 4. Tôi chỉ gọi nó qua bài đăng ajax theo thời gian. Tôi sử dụng nó để xác định bao lâu tôi cần phải thiết lập cuộc gọi ajax hẹn giờ của tôi cho đó là lý do tại sao tôi trả lại số giây còn lại.

<OutputCache(NoStore:=True, Duration:=0)> _ 
    Function GetExpirySeconds() As ActionResult 
     Dim tkt As FormsAuthenticationTicket = Nothing 
     Dim retVal As ActionResult = Json("expired") 
     Response.Cookies.Remove(FormsAuthentication.FormsCookieName) 
     If Request.Cookies(FormsAuthentication.FormsCookieName) IsNot Nothing AndAlso Request.Cookies(FormsAuthentication.FormsCookieName).Value <> "" Then 
      tkt = FormsAuthentication.Decrypt(Request.Cookies(FormsAuthentication.FormsCookieName).Value) 
      retVal = Json(Math.Floor((tkt.Expiration - Now).TotalSeconds)) 
      If Math.Floor((tkt.Expiration - Now).TotalSeconds) <= 0 Then retVal = Json("expired") 
     End If 
     Return retVal 
    End Function 

Blog Post for Reference: Kobi's Blog

+0

Làm rõ: Đã khá lâu kể từ khi nó được viết, nhưng nếu bộ nhớ phục vụ cho tôi việc xóa cookie khỏi phản hồi sẽ đánh tôi là chìa khóa. – Steve

+0

Tôi không sử dụng xác thực biểu mẫu, nhưng Asp.Net Identity, vì vậy giải pháp này không áp dụng được trong trường hợp của tôi. – Riokmij

+0

Xin lỗi tôi đã bỏ lỡ phần câu hỏi của bạn đã đề cập đến Danh tính. Tôi không quen với công nghệ này. Dường như máy chủ vẫn đang cập nhật cookie và trả lại cho máy khách trong phản hồi. Không có cách nào để ngăn chặn điều này? – Steve

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