ServiceStack 会话生命周期在心跳时增加

ServiceStack session lifetime is increased on heartbeat

我有一个 ServerEventsFeature 的服务。我正在使用 ServerEventsClient 默认情况下向服务发送心跳。据我所知,ServiceStack 不支持开箱即用的滑动过期,但会话生命周期会在每次心跳后刷新。这是应该的吗?有什么方法可以控制它吗?我通过将 SessionExpiry 设置为 30s 和 HeartbeatInterval 设置为 20s 来测试它 - 该应用程序发送多个 (10+) 心跳 w\o 任何问题。此外,如果客户端应用程序崩溃并强制关闭 - 会话将 "alive" 在服务器会话列表中,直到我尝试使用它,有没有办法提前删除它?

示例:

  1. 启动服务器

  2. 启动客户端 1

执行

var sessionPattern = IdUtils.CreateUrn<IAuthSession>("");
var sessionKeys = Cache.GetKeysStartingWith(sessionPattern).ToList();
var allSessions = Cache.GetAll<IAuthSession>(sessionKeys);

结果计数为 1

  1. 启动客户端 2 和 3

  2. 通过强制关闭(无注销呼叫)删除客户端 1

  3. 再次执行相同的代码 - 结果计数为 3

服务器事件订阅对用户会话没有任何影响。

用户会话在用户成功通过身份验证后创建,并在用户明确注销会话到期时销毁。

服务器事件订阅只是对用户与 SSE 的长期 HTTP 连接的引用 /event-stream,它与用户会话的唯一关系是订阅可能是经过身份验证的用户的订阅。

但是用户会话的生命周期(这只是一个 AuthUserSession POCO 在注册 ICacheClient 中持续存在)不受服务器事件订阅的影响,因为它永远不会重新保存用户会话,所以从不更改会话到期时间。