10

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

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

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

有没有一种简单的方法来告诉会话提供者在调用服务时延长到期时间?

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

更新

根据 myz 给出的答案,我们现在有一个简单的解决方案,通过扩展 ResponseFilterAttribute来提供我们所需的控制级别。

4

1 回答 1

10

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

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

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

var sessionKey = SessionFeature.GetSessionKey(httpReq.GetSessionId());
redis.ExpireEntryIn(sessionKey, slidingExpiry); //"urn:iauthsession:{sessionId}"
于 2013-02-13T17:47:49.440 回答