2013-02-13 64 views
10

在ServiceStack的认证,仓库和缓存提供商提供了一种简单的方式来登录会话添加到Web应用程序,几乎没有额外的代码。我发现可以配置身份验证提供程序的会话超时时间,例如:如何推进会话超时在ServiceStack

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

这提供了从登录时点到期。如果我们正在开发一个安全系统,必须在很短的时间内注销用户,那么我们会将其从默认的2周改为上述示例。但是,这有一个问题,即无论用户是否仍在与应用程序交互,用户登录10分钟后都会被踢出。

有一个简单的方法来告诉会话提供延长到期时间服务被称为是什么时候?

理想的情况下,将允许我们扩展了会议具体服务/请求(这样,当用户主动与应用程序交互,因此调查服务可以忽略会话只延长)。

更新

基于由mythz给我们现在有一个简单的解决方案,它提供了我们需要通过extending the ResponseFilterAttribute控制水平的答案。

+2

这不是您的问题的答案,但它的术语是“滑动”。例如,滑动缓存,滑动会话超时等。 – Matthew 2013-02-13 16:35:39

回答

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 2013-02-13 17:54:47

+0

是的,我认为'EnableSlidingExpiration'选项会起作用。 – mythz 2013-02-13 17:55:44

+2

希望对别人有用,[这里是解决方案](http://teadriven.me.uk/2013/02/14/sliding-sessions-in-service-stack)我根据mythz建议。 – Dan 2013-02-14 22:58:14