处理用户会话和活动状态

本文关键字:活动状态 会话 用户 处理 | 更新日期: 2023-09-27 17:56:09

通常我会通过在成功登录后设置会话来处理登录用户。然后,在每个请求上检查该会话以确保其存在。

但是是关于我是否禁用了用户帐户并且他们当前已登录?在这种情况下,用户仍然可以访问系统,直到其会话过期。

目前,我正在从每个请求的数据库中提取帐户信息并检查状态字段。我觉得这是很多不必要的开销。在我的方案中,这些帐户中有帐户和用户。因此,我必须检查每个请求的帐户状态以及用户状态。

有没有更好的方法?请注意,我使用的是 SQL Server 会话状态,因为这是一个多服务器环境。

提前谢谢。

处理用户会话和活动状态

在会话启动时将会话 ID 存储在数据库中。禁用用户时,只需删除数据库中用户会话 ID 字段中的值即可。

检查会话 ID 是否与请求时数据库中存储的会话 ID 匹配。

如果不是,session.abandon()。

禁用用户帐户时,为什么不删除与该帐户关联的任何会话。 然后我们用户访问服务器,会话将不再存在,用户将无法访问。

你可以使用饼干!饼干是最强大的轻量级数据 存储!存储加密的用户名信息和状态(活动/非活动) 变成饼干。

在第一个请求之后,您可以实现类似 AuthenticationManager.IsAuthorized("user name") 的方法,而不是在每个请求上存储数据。此方法应返回两个值:

  • 真/假(分别是授权与否)。
  • 枚举原因:用户阻止、超时、...

因此,您将检查会话是否在每个请求上仍然有效,并且每次会话启动都会检索一次用户数据。

如果在应用程序中启用了匿名标识,则可以使用匿名标识:

<anonymousIdentification enabled="true"/>

你可以得到它,就像:

string strId = Request.AnonymousID;

默认为 Guid。

AnonymousId 对于每个用户都是唯一的,您将跟踪您的用户是否经过身份验证。