1

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

但是,如果我禁用了一个用户帐户并且他们当前已登录,那是什么意思?在这种情况下,用户仍然可以访问系统,直到他们的会话到期。

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

有没有更好的办法?请注意,我将 SQL Server 会话状态用作多服务器环境。

提前致谢。

4

5 回答 5

1

在会话开始时将会话 ID 存储在数据库中。当您禁用用户时,只需删除数据库中用户会话 ID 字段中的值。

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

如果没有,session.abandon()。

于 2013-01-27T20:36:53.520 回答
0

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

于 2013-01-27T20:29:47.620 回答
0

你可以使用cookies!Cookie 是最强大的轻量级数据存储!将加密的用户名信息和状态(活动/不活动)存储到 cookie 中。

于 2013-01-27T20:40:58.393 回答
0

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

  • 真/假(分别是否被授权)。
  • 枚举的原因:UserBlocked、Timeout、...

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

于 2013-01-27T21:29:59.663 回答
0

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

<anonymousIdentification enabled="true"/>

你可以得到它:

string strId = Request.AnonymousID;

默认是Guid。

AnonymousId 对于每个用户都是唯一的,并且您将跟踪您的用户是否通过 IsAuthenticated。

于 2013-01-27T22:10:19.893 回答