Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ServiceStack中提前会话超时_C#_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack - Fatal编程技术网 servicestack,C#,servicestack" /> servicestack,C#,servicestack" />

C# 如何在ServiceStack中提前会话超时

C# 如何在ServiceStack中提前会话超时,c#,servicestack,C#,servicestack,ServiceStack中的身份验证、存储库和缓存提供程序提供了一种向web应用程序添加登录会话的简单方法,几乎不需要额外的代码。我发现可以配置身份验证提供程序的会话超时,例如: new CredentialAuthProvider{SessionExpiry=TimeSpan.FromMinutes(10)} 这提供了从登录点开始的到期日。如果我们正在开发一个安全系统,必须在短时间内让用户注销,那么我们会将默认值从2周改为类似上面的示例。但问题是,无论用户是否仍在与应用程序交互,10分钟后登

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

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是否支持此功能?