如何判断用户帐户是否已使用ASP.Net窗体身份验证登录?

如何判断用户帐户是否已使用ASP.Net窗体身份验证登录?,asp.net,security,forms-authentication,Asp.net,Security,Forms Authentication,我们的SSO登录过程使用表单对SQL Server中的自定义用户存储进行身份验证 我们新的安全要求之一是一次只允许一个帐户有一个活动会话。因此,每当用户登录时,我们都会检查登录凭据是否已处于活动状态,最好在另一个会话结束之前阻止新用户再次登录。或者,我们可以迫使另一届会议结束,如果这更容易实施的话 有没有一种简单的方法可以通过表单身份验证实现这一点?我们考虑了一种自定义方法,跟踪数据库中的每个会话,但这需要大量工作,我们可能必须修改所有应用程序以检测会话结束,我希望避免这种情况。我认为Forms

我们的SSO登录过程使用表单对SQL Server中的自定义用户存储进行身份验证

我们新的安全要求之一是一次只允许一个帐户有一个活动会话。因此,每当用户登录时,我们都会检查登录凭据是否已处于活动状态,最好在另一个会话结束之前阻止新用户再次登录。或者,我们可以迫使另一届会议结束,如果这更容易实施的话

有没有一种简单的方法可以通过表单身份验证实现这一点?我们考虑了一种自定义方法,跟踪数据库中的每个会话,但这需要大量工作,我们可能必须修改所有应用程序以检测会话结束,我希望避免这种情况。我认为Forms Auth中必须有某种东西来处理这个问题

我见过MembershipUser.IsOnline()方法,这似乎很理想,但我们没有使用成员资格提供程序


更新:为了清楚起见,我不需要检查当前用户是否已登录,我需要知道其他人是否已使用相同的帐户登录。

如果
HttpContext.current.user
属性不为空,则他们已登录。和
Identity.IsAuthenticated
为真。

请尝试以下操作:

System.Web.HttpContext.Current.User.Identity.IsAuthenticated

如果我理解您的意思是正确的,您需要根据用户id存储最后一个活动状态。
IsOnline()是通过检查成员资格数据库中持久化的属性来实现的。
因此,您需要在某个地方跟踪用户活动。

您可以实现一个更新用户活动时间戳的httpmodule。

Hm,httpmodule是一个有趣的想法。我将对此进行研究。这是很久以前的事了,但我发现这已经成为一个值得注意的问题,所以我将分享我的解决方案——我们最终按照知识库的思路进行了定制。建议,基本上是跟踪数据库中的用户活动。对于每个用户,我们将存储最后登录日期和会话密钥。密钥是在用户登录时生成和存储的,然后我们会在每个页面上检查当前密钥。如果当前用户的密钥与数据库中的密钥不匹配,我们将使他们的会话无效并立即注销。