C# 如何在ServiceStack中提前会话超时
ServiceStack中的身份验证、存储库和缓存提供程序提供了一种向web应用程序添加登录会话的简单方法,几乎不需要额外的代码。我发现可以配置身份验证提供程序的会话超时,例如:C# 如何在ServiceStack中提前会话超时,c#,
servicestack,C#,
servicestack,ServiceStack中的身份验证、存储库和缓存提供程序提供了一种向web应用程序添加登录会话的简单方法,几乎不需要额外的代码。我发现可以配置身份验证提供程序的会话超时,例如: new CredentialAuthProvider{SessionExpiry=TimeSpan.FromMinutes(10)} 这提供了从登录点开始的到期日。如果我们正在开发一个安全系统,必须在短时间内让用户注销,那么我们会将默认值从2周改为类似上面的示例。但问题是,无论用户是否仍在与应用程序交互,10分钟后登
new CredentialAuthProvider{SessionExpiry=TimeSpan.FromMinutes(10)}
这提供了从登录点开始的到期日。如果我们正在开发一个安全系统,必须在短时间内让用户注销,那么我们会将默认值从2周改为类似上面的示例。但问题是,无论用户是否仍在与应用程序交互,10分钟后登录的用户都将被踢出
在调用服务时,是否有一种简单的方法告诉会话提供程序延长到期时间
理想情况下,它允许我们为特定的服务/请求扩展会话(这样,只有当用户主动与应用程序交互时,会话才会被扩展,因此可以忽略轮询的服务)
更新
根据mythz给出的答案,我们现在有了一个简单的解决方案,它提供了我们所需的控制级别。还不支持自动“滑动会话过期”。您基本上需要在每次成功请求时重置会话缓存项。i、 e.您可以有一个响应过滤器(因为它们只针对经过身份验证的请求执行),用于重新保存会话,从而将会话的生命期延长到到期时间:
var userSession = httpReq.GetSession();
httpReq.SaveSession(userSession, slidingExpiryTimeSpan);
如果您知道正在使用的缓存提供程序,例如Redis,则可以手动更新过期超时,而无需重新读取条目,例如:
var sessionKey = SessionFeature.GetSessionKey(httpReq.GetSessionId());
redis.ExpireEntryIn(sessionKey, slidingExpiry); //"urn:iauthsession:{sessionId}"
这不是你问题的答案,但它的术语是“滑动”。例如滑动缓存、滑动会话超时等,谢谢。也许将来SS的一个特性是您可以添加到服务请求函数中的一个属性,该属性明确地告诉SS滑动到期日,因此默认行为将不是滑动到期日。希望它对其他人有用,根据mythz的建议,我同意了。你还应该编辑你的答案,提及你的解决方案,这样就更容易找到基于同一个站点但有一些附加保护的过滤器如果(!req.Items.ContainsKey(requestitemsessionkey))返回;var session=req.GetSession();if(session!=null&&session.IsAuthenticated)req.SaveSession(session,expiration)`@mythz对此有任何更新吗?新版本v4或v5是否支持此功能?