如何在Asp.Net Core 2.2中获取所有登录用户会话?

时间:2019-02-01 09:18:49

标签: session asp.net-core session-state asp.net-core-2.2

我使用会话在Asp.Net Core 2.2上有一个站点。

有什么办法让所有用户会话,所有登录用户并对其进行迭代?

如果某些用户被禁止,也要中断会话。

1 个答案:

答案 0 :(得分:0)

不,不。用户的身份验证状态只能通过客户端上的本地cookie保留。没有登录用户的“主列表”。但是,您可以根据需要创建其他表,也可以记录用户的登录和注销信息,然后可以参考这些信息。它最终不会完全准确,尤其是对于注销,因为用户的auth可能只是超时,不需要您采取任何措施就可以记录发生的事情,因此它最终无法准确记录。但是,如果您具有已知的身份验证到期时间(例如20分钟),则可以假定早于该时间范围的任何登录均不再有效。假定绝对到期,这是默认值。如果要逐渐到期,则您需要做更多的工作来保留某种用户活动记录。

长短不一,这并不无关紧要,但是如果您确实需要这些信息,可以这样做。

就自动注销而言,只需要使安全标记无效即可。这将实际上使用户的身份验证cookie无效,从而迫使他们不得不再次登录。此时,您可以检查其“已禁止”状态,但是可以这样做,并选择拒绝其登录尝试。

await _userManager.UpdateSecurityStampAsync(userId);

但是,这不会立即生效,因为不会随每个请求重新验证安全标记。您可以通过在Startup.cs中将验证间隔设置为零来实现这一目标:

services.Configure<IdentityOptions>(options =>
{
    options.SecurityStampValidationInterval = TimeSpan.FromSeconds(0);             
});

但是,这会降低性能,因为每个请求都需要访问数据库以检查安全性标记。您可能希望设置一个更合理的间隔,以平衡想要尽快注销被禁用户而又不需要进行过多数据库请求的情况。