如何在ServiceStack中提前会话超时

时间:2013-02-13 16:14:44

标签: c# servicestack

ServiceStack中的身份验证,存储库和缓存提供程序提供了一种向Web应用程序添加登录会话的简单方法,几乎​​不需要其他代码。我发现可以配置身份验证提供程序的会话超时,例如:

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

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

是否有一种简单的方法可以告诉会话提供商延长调用服务时的到期时间?

理想情况下,它允许我们扩展特定服务/请求的会话(这样只有当用户主动与应用程序交互时才会扩展会话,因此可以忽略轮询的服务)。

更新

根据mythz给出的答案,我们现在有一个简单的解决方案,可以提供extending the ResponseFilterAttribute所需的控制级别。

1 个答案:

答案 0 :(得分:10)

ServiceStack自动不支持“滑动会话到期”。您基本上需要在每次成功请求时重置会话缓存条目。即你可以有一个响应过滤器(因为它们只针对经过身份验证的请求执行),这些过滤器会重新保存会话,这会在到期时间内延长它的生命周期:

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

如果你知道你正在使用什么缓存提供商,例如Redis您可以手动更新到期超时而无需重新读取条目,例如:

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