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

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

从登录点开始有效。如果我们正在开发一个安全的系统,该系统必须在短时间内将用户注销,则可以将其从默认的2周更改为上面的示例。但这是一个问题,即无论用户是否仍在与应用程序交互,都将在距离用户登录10分钟后将其踢出。

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

理想情况下,它将允许我们针对特定服务/请求扩展 session (以便仅在用户与应用程序进行积极交互时才扩展 session ,因此可以忽略轮询的服务)。

更新

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

最佳答案

ServiceStack目前不自动支持“滑动 session 期满”。基本上,您将需要在每个成功的请求上重置 session 缓存条目。也就是说,您可以有一个响应过滤器(因为它们仅针对经过身份验证的请求执行),可以重新保存 session ,从而可以将 session 的生存期延长至到期时间:

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

如果您知道您使用的是哪种缓存提供程序,例如Redis,您可以手动更新到期超时,而无需重新读取条目,例如:
var sessionKey = SessionFeature.GetSessionKey(httpReq.GetSessionId());
redis.ExpireEntryIn(sessionKey, slidingExpiry); //"urn:iauthsession:{sessionId}"

关于c# - 如何在ServiceStack中提前 session 超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14857921/

10-17 02:10