asp.net中的单次登录

asp.net中的单次登录,asp.net,session,c#-4.0,login,Asp.net,Session,C# 4.0,Login,我正在为一个大学项目制作一个网站。我想向我的项目网站添加一项功能 当用户登录网站时,应注销同一用户帐户的所有其他登录,即每个帐户一次只允许一次登录 当同一个用户ID尝试登录多个设备时,如何终止另一个设备上的会话?您可以通过执行以下操作来摆脱这种情况: 想法 每当用户登录到他们的帐户时,我们都会将其用户名与会话ID一起存储。下次登录的人尝试发出请求时,我们会检查他们的会话ID是否与我们为他们存储的会话ID匹配。如果不匹配,则意味着有其他人在他们之后登录!这样我们就可以安全地将它们注销 实施 我们将

我正在为一个大学项目制作一个网站。我想向我的项目网站添加一项功能

当用户登录网站时,应注销同一用户帐户的所有其他登录,即每个帐户一次只允许一次登录


当同一个用户ID尝试登录多个设备时,如何终止另一个设备上的会话?

您可以通过执行以下操作来摆脱这种情况:

想法

每当用户登录到他们的帐户时,我们都会将其用户名与会话ID一起存储。下次登录的人尝试发出请求时,我们会检查他们的会话ID是否与我们为他们存储的会话ID匹配。如果不匹配,则意味着有其他人在他们之后登录!这样我们就可以安全地将它们注销

实施

我们将利用三件事。 会话ID:允许我们区分某人的浏览实例

Global.asax:获取会话结束事件

一个存储位置:

HttpContext.Current.Application

数据库

如果您的网站运行在一台服务器上,那么您可以只使用应用程序,但如果它运行在多台服务器上,则必须使用数据库。代码显示它是为应用程序完成的。 用户登录时,您需要存储会话id:

UserAccout ua = GetUserAccount();
HttpContext.Current.Application["usr_" + ua.UserName] = HttpContext.Current.Session.SessionID;
当他们注销时,我们需要清除它:

 UserAccout ua = GetUserAccount();
    HttpContext.Current.Application.Remove("usr_" + ua.UserName);
在Global.asax文件中,您应该在会话结束时调用相同的注销代码进行清理

void Session_End(object sender, EventArgs e)
{
UserAccout ua = GetUserAccount();
if (ua != null)
{
HttpContext.Current.Application.Remove("usr_" + ua.UserName);
}
}
现在,我们需要实际检查用户是否应该被踢出,因此在所有请求的开头执行此操作:

UserAccout ua = GetUserAccount();
if (!HttpContext.Current.Application["usr_" + ua.UserName].Equals(HttpContext.Current.Session.SessionID))
{
Logout();
HttpContext.Current.Response.Redirect("SignOut.aspx");
}

请澄清,假设一个用户a登录,现在如果另一个用户B登录到该站点,那么用户a将自动注销???如果用户a从某个地方X登录,然后他再次从某个地方Y登录,那么从a登录应该注销。请提供更多信息。你试过什么?什么不起作用?此问题不可回答,因为我认为:这可能有助于您: