2013-02-13 36 views
10

Nhà cung cấp xác thực, lưu trữ và lưu trữ trong ServiceStack cung cấp cách đơn giản để thêm phiên đăng nhập vào ứng dụng web mà không có mã bổ sung. Tôi đã thấy rằng thời gian chờ của phiên cho một nhà cung cấp xác thực có thể được định cấu hình, ví dụ:Cách nâng cao thời gian chờ phiên trong ServiceStack

new CredentialsAuthProvider { SessionExpiry = TimeSpan.FromMinutes(10) } 

Điều này cung cấp hết hạn từ thời điểm đăng nhập. Nếu chúng tôi đang phát triển một hệ thống an toàn phải đăng nhập người dùng sau một thời gian ngắn thì chúng tôi sẽ thay đổi điều này từ mặc định là 2 tuần thành một ví dụ như ví dụ trên. Nhưng điều này có vấn đề là 10 phút từ việc đăng nhập vào người dùng sẽ bị đuổi ra bất kể họ có tương tác với ứng dụng hay không.

Có cách nào đơn giản để yêu cầu nhà cung cấp phiên mở rộng thời gian hết hạn khi dịch vụ được gọi không?

Lý tưởng là nó sẽ cho phép chúng tôi mở rộng phiên cho các dịch vụ/yêu cầu cụ thể (để phiên chỉ được mở rộng khi người dùng chủ động tương tác với ứng dụng và do đó có thể bỏ qua các dịch vụ được thăm dò).

Cập nhật

Dựa trên câu trả lời được đưa ra bởi mythz bây giờ chúng tôi có một giải pháp đơn giản mà cung cấp mức độ kiểm soát chúng tôi yêu cầu bởi extending the ResponseFilterAttribute.

+2

Đây không phải là câu trả lời cho câu hỏi của bạn, nhưng cụm từ đó là "trượt". Ví dụ: bộ nhớ cache trượt, thời gian chờ phiên trượt, v.v. – Matthew

Trả lời

10

ServiceStack chưa tự động hỗ trợ "hết hạn phiên trượt". Bạn về cơ bản sẽ cần phải thiết lập lại mục nhập bộ nhớ cache phiên trên mọi yêu cầu thành công. tức là bạn có thể có một bộ lọc phản ứng (vì chúng tôi chỉ thực hiện cho các yêu cầu chứng thực) mà lại tiết kiệm phiên đó sẽ có tác dụng mở rộng đó là cuộc sống thời gian bởi thời gian hết hạn:

var userSession = httpReq.GetSession(); 
httpReq.SaveSession(userSession, slidingExpiryTimeSpan); 

Nếu bạn biết nhà cung cấp bộ nhớ đệm bạn đang sử dụng, ví dụ Làm lại, bạn có thể cập nhật hết thời gian hết hạn theo cách thủ công mà không cần đọc lại mục nhập, ví dụ:

var sessionKey = SessionFeature.GetSessionKey(httpReq.GetSessionId()); 
redis.ExpireEntryIn(sessionKey, slidingExpiry); //"urn:iauthsession:{sessionId}" 
+0

Cảm ơn. Có lẽ một tính năng cho SS trong tương lai sẽ là một thuộc tính mà bạn có thể thêm vào một chức năng yêu cầu dịch vụ mà nói rõ ràng nó để trượt hết hạn, do đó hành vi mặc định sẽ không được. – Dan

+0

Vâng tôi nghĩ tùy chọn 'EnableSlidingExpiration' sẽ hoạt động. – mythz

+2

Với hy vọng rằng nó hữu ích cho người khác, [đây là giải pháp] (http://teadriven.me.uk/2013/02/14/sliding-sessions-in-service-stack) Tôi đã đi với dựa trên thần thoại đề xuất. – Dan

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