如何在ServiceStack中提前会话超时

本文关键字:会话 超时 ServiceStack | 更新日期: 2023-09-27 17:59:19

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

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

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

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

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

更新

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

如何在ServiceStack中提前会话超时

ServiceStack还不支持自动"滑动会话到期"。您基本上需要在每次成功请求时重置会话缓存条目。也就是说,你可以有一个响应过滤器(因为它们只针对经过身份验证的请求执行),它可以重新保存会话,从而将其寿命延长到到期时间:

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

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

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