2013-02-13 5 views
10

ServiceStack의 인증, 리포지토리 및 캐싱 공급자는 거의 코드를 추가하지 않고 웹 응용 프로그램에 로그인 세션을 추가하는 간단한 방법을 제공합니다. 인증 공급자의 세션 제한 시간을 구성 할 수 있음을 확인했습니다. 예를 들면 다음과 같습니다.ServiceStack에서 세션 시간 초과를 앞당기는 방법

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

로그인 시점에서 만료됩니다. 짧은 시간 후에 사용자를 로그 아웃해야하는 보안 시스템을 개발할 경우 기본값 인 2 주에서 위의 예와 같이 변경합니다. 그러나 이것은 사용자가 로그인 한 후 10 분이 지나도 응용 프로그램과 계속 상호 작용하는지 여부에 관계없이 쫓겨날 수 있다는 문제가 있습니다.

서비스가 호출 될 때 만료 시간을 연장하도록 세션 공급자에게 알리는 간단한 방법이 있습니까?

이상적으로 특정 서비스/요청에 대한 세션을 확장 할 수 있으므로 사용자가 적극적으로 응용 프로그램과 상호 작용할 때만 세션이 확장되므로 폴링 된 서비스를 무시할 수 있습니다.

업데이트

우리가 지금 우리가 extending the ResponseFilterAttribute에 의해 필요로 제어 수준을 제공하는 간단한 솔루션을 mythz에 의해 주어진 답변에 따라.

+2

)이 질문에 대한 답변이 아니지만 "미끄럼"용어입니다. 예 : 슬라이딩 캐시, 슬라이딩 세션 타임 아웃 등 – Matthew

답변

10

ServiceStack은 "슬라이딩 세션 만료"를 자동으로 지원하지 않습니다. 기본적으로 성공적인 요청이있을 때마다 세션 캐시 항목을 재설정해야합니다.

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

당신이 알고있는 경우 : (그들은 단지 인증 요청을 실행하고 있기 때문에) 즉, 당신은 그것이 만료 시간에 의해 수명 시간의 연장 효과를 가질 것이다 세션을 재-저장하는 응답 필터를 가질 수 어떤 캐싱 공급자를 사용하고 있습니까? Redis를 사용하면 항목을 다시 읽지 않고 만료 시간 제한을 수동으로 업데이트 할 수 있습니다 (예 :

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

고마워요. SS의 향후 기능은 아마도 서비스 요청 기능에 추가 할 수있는 속성 일 것입니다.이 기능을 사용하면 만료 시간을 미루도록 명시 적으로 알려주므로 기본 동작은 그렇지 않을 수 있습니다. – Dan

+0

네,'EnableSlidingExpiration' 옵션이 효과가 있다고 생각합니다. – mythz

+2

다른 사람들에게 유용 할 수 있기를 희망하여 [여기 해결책이 있습니다] (http://teadriven.me.uk/2013/02/14/sliding-sessions-in-service-stack) 나는 mythz 제안. – Dan

관련 문제