ServiceStack 会话生命周期在心跳时增加
ServiceStack session lifetime is increased on heartbeat
我有一个 ServerEventsFeature
的服务。我正在使用 ServerEventsClient
默认情况下向服务发送心跳。据我所知,ServiceStack 不支持开箱即用的滑动过期,但会话生命周期会在每次心跳后刷新。这是应该的吗?有什么方法可以控制它吗?我通过将 SessionExpiry
设置为 30s 和 HeartbeatInterval
设置为 20s 来测试它 - 该应用程序发送多个 (10+) 心跳 w\o 任何问题。此外,如果客户端应用程序崩溃并强制关闭 - 会话将 "alive" 在服务器会话列表中,直到我尝试使用它,有没有办法提前删除它?
示例:
启动服务器
启动客户端 1
执行
var sessionPattern = IdUtils.CreateUrn<IAuthSession>("");
var sessionKeys = Cache.GetKeysStartingWith(sessionPattern).ToList();
var allSessions = Cache.GetAll<IAuthSession>(sessionKeys);
结果计数为 1
启动客户端 2 和 3
通过强制关闭(无注销呼叫)删除客户端 1
再次执行相同的代码 - 结果计数为 3
服务器事件订阅对用户会话没有任何影响。
用户会话在用户成功通过身份验证后创建,并在用户明确注销或会话到期时销毁。
服务器事件订阅只是对用户与 SSE 的长期 HTTP 连接的引用 /event-stream
,它与用户会话的唯一关系是订阅可能是经过身份验证的用户的订阅。
但是用户会话的生命周期(这只是一个 AuthUserSession POCO 在注册 ICacheClient
中持续存在)不受服务器事件订阅的影响,因为它永远不会重新保存用户会话,所以从不更改会话到期时间。
我有一个 ServerEventsFeature
的服务。我正在使用 ServerEventsClient
默认情况下向服务发送心跳。据我所知,ServiceStack 不支持开箱即用的滑动过期,但会话生命周期会在每次心跳后刷新。这是应该的吗?有什么方法可以控制它吗?我通过将 SessionExpiry
设置为 30s 和 HeartbeatInterval
设置为 20s 来测试它 - 该应用程序发送多个 (10+) 心跳 w\o 任何问题。此外,如果客户端应用程序崩溃并强制关闭 - 会话将 "alive" 在服务器会话列表中,直到我尝试使用它,有没有办法提前删除它?
示例:
启动服务器
启动客户端 1
执行
var sessionPattern = IdUtils.CreateUrn<IAuthSession>("");
var sessionKeys = Cache.GetKeysStartingWith(sessionPattern).ToList();
var allSessions = Cache.GetAll<IAuthSession>(sessionKeys);
结果计数为 1
启动客户端 2 和 3
通过强制关闭(无注销呼叫)删除客户端 1
再次执行相同的代码 - 结果计数为 3
服务器事件订阅对用户会话没有任何影响。
用户会话在用户成功通过身份验证后创建,并在用户明确注销或会话到期时销毁。
服务器事件订阅只是对用户与 SSE 的长期 HTTP 连接的引用 /event-stream
,它与用户会话的唯一关系是订阅可能是经过身份验证的用户的订阅。
但是用户会话的生命周期(这只是一个 AuthUserSession POCO 在注册 ICacheClient
中持续存在)不受服务器事件订阅的影响,因为它永远不会重新保存用户会话,所以从不更改会话到期时间。