处理用户会话和活动状态

时间:2013-01-27 20:26:23

标签: c# asp.net session authentication

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

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

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

有更好的方法吗?请注意,我使用SQL Server会话状态作为多服务器环境。

提前致谢。

5 个答案:

答案 0 :(得分:1)

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

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

如果没有,session.abandon()。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  

您可以使用cookies! Cookie是最强大的轻量级数据   存储!存储加密的用户名信息&状态(活动/去活)   进入饼干。

答案 3 :(得分:0)

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

  • 是/否(如果是否授权)。
  • 作为枚举的原因:UserBlocked,Timeout,...

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

答案 4 :(得分:0)

如果在您的应用程序中启用了匿名识别:

<anonymousIdentification enabled="true"/>

你可以这样说:

string strId = Request.AnonymousID;

默认为Guid。

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