项目

会话管理

会话管理功能允许您防止并发登录并管理用户会话。

防止并发登录

身份验证部分提供了一个防止并发登录的设置,包含三个选项:

  1. 禁用

    不限制并发登录。此为默认设置。

  2. 从同类型设备登出

    仅允许存在一个同类型的会话。 "同类型"意味着我们可以限制在浏览器中的单次登录,但仍可通过移动应用程序登录而不影响浏览器会话。因此,对于每种设备类型,我们可能允许单次登录。

  3. 从所有设备登出

    当创建新会话时,所有其他会话将被登出。

防止并发登录

管理用户会话

您可以在身份验证模块的"用户"页面查看和管理用户会话。

用户会话 会话模态框 会话详情模态框

一旦您撤销某个会话,该用户将被登出。

IdentitySessionCleanupBackgroundWorker

IdentitySessionCleanupBackgroundWorker是一个后台工作程序,用于移除过去未活跃的会话。

IdentitySessionCleanupOptions

  • IsCleanupEnabled:默认值为true
  • CleanupPeriod:默认值为1小时。
  • InactiveTimeSpan:默认值为30天。

工作原理

此功能依赖于ABP框架的动态声明功能。工作原理如下:

  • IdentitySessionClaimsPrincipalContributor会生成一个随机GUID作为sessionid添加到ClaimsPrincipal中,这通常在登录时获取用户声明时发生。
  • IdentityOnSignedIn事件和OpenIddictProcessSignIn事件会获取此sessionid并将其存储在数据库(IdentitySession表)中。
  • 动态声明系统的IdentitySessionDynamicClaimsPrincipalContributor会确保sessionid存在或执行登出操作。
  • IdentitySessionChecker会检查存在的sessionid,并更新缓存中的LastAccessedIpAddress
  • IdentitySessionManager用于获取一个或多个会话列表,并将缓存中的LastAccessedIpAddress更新到数据库。
  • 模块会在登出时移除会话。
  • IdentitySessionCleanupBackgroundWorker会移除非活跃的会话。
  • 一旦创建新会话,我们将根据PreventConcurrentLogin设置移除其他会话。
  • IdentitySessionManager用于管理/维护会话。请使用此类而不是直接使用存储库。
  • IdentitySessionCheckerOptionsUpdateSessionAfterCacheHit属性(默认为10次)用于配置IdentitySessionChecker,当缓存命中达到此值时,将在数据库中更新会话。这有助于减少数据库更新频率并提高性能。
在本文档中