会话管理
会话管理功能允许您防止并发登录并管理用户会话。
防止并发登录
身份验证部分提供了一个防止并发登录的设置,包含三个选项:
禁用不限制并发登录。此为默认设置。
从同类型设备登出仅允许存在一个同类型的会话。 "同类型"意味着我们可以限制在浏览器中的单次登录,但仍可通过移动应用程序登录而不影响浏览器会话。因此,对于每种设备类型,我们可能允许单次登录。
从所有设备登出当创建新会话时,所有其他会话将被登出。
管理用户会话
您可以在身份验证模块的"用户"页面查看和管理用户会话。
一旦您撤销某个会话,该用户将被登出。
IdentitySessionCleanupBackgroundWorker
IdentitySessionCleanupBackgroundWorker是一个后台工作程序,用于移除过去未活跃的会话。
IdentitySessionCleanupOptions
IsCleanupEnabled:默认值为true。CleanupPeriod:默认值为1小时。InactiveTimeSpan:默认值为30天。
工作原理
此功能依赖于ABP框架的动态声明功能。工作原理如下:
IdentitySessionClaimsPrincipalContributor会生成一个随机GUID作为sessionid添加到ClaimsPrincipal中,这通常在登录时获取用户声明时发生。Identity的OnSignedIn事件和OpenIddict的ProcessSignIn事件会获取此sessionid并将其存储在数据库(IdentitySession表)中。动态声明系统的IdentitySessionDynamicClaimsPrincipalContributor会确保sessionid存在或执行登出操作。IdentitySessionChecker会检查存在的sessionid,并更新缓存中的LastAccessed和IpAddress。IdentitySessionManager用于获取一个或多个会话列表,并将缓存中的LastAccessed和IpAddress更新到数据库。- 模块会在登出时移除会话。
IdentitySessionCleanupBackgroundWorker会移除非活跃的会话。- 一旦创建新会话,我们将根据
PreventConcurrentLogin设置移除其他会话。 IdentitySessionManager用于管理/维护会话。请使用此类而不是直接使用存储库。IdentitySessionCheckerOptions的UpdateSessionAfterCacheHit属性(默认为10次)用于配置IdentitySessionChecker,当缓存命中达到此值时,将在数据库中更新会话。这有助于减少数据库更新频率并提高性能。
抠丁客






