c# - 如何在 ServiceStack 中提前 session 超时

标签 c# servicestack

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

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

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

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

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

更新

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

最佳答案

ServiceStack还不自动支持“滑动 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/

相关文章:

c# - 同一个kinect设备上的多个应用程序

c# - 我怎样才能获取页面的html?

c# - ServiceStack JsonServiceClient,强制本地主机的网络流量?

ServiceStack RazorRockstars 示例 - 保留路由?

c#文件上传的分块传输结合访问ServiceStack中的路由参数

c# - Windows shell 扩展的跨平台替代品 - WebDAV 平台?

c# - XPath 小写() 函数

c# - 如何使用 Open XML 和 SAX 以编程方式检测空行?

authentication - ServiceStack - UserAuth "Id"是 INT,而 RavenDb 预计 "Id"是 STRING

typescript - ServiceStack 身份验证中的 httponly ss-tok bearerToken cookie 有什么意义