我正在为一个大学项目的网站工作。我想添加一个功能到我的项目网站。在asp.net中单一登录
当用户登录到网站时,应该注销同一用户帐户的所有其他登录,即每次只允许一个帐户登录。
当相同的用户ID试图登录到多个设备上时,如何终止其他设备上的会话?
我正在为一个大学项目的网站工作。我想添加一个功能到我的项目网站。在asp.net中单一登录
当用户登录到网站时,应该注销同一用户帐户的所有其他登录,即每次只允许一个帐户登录。
当相同的用户ID试图登录到多个设备上时,如何终止其他设备上的会话?
你可以出了状况做这样的事情:
理念
每当自己的帐户用户登录我们存储他们的用户名与他们的会话ID一起。下一次登录的人尝试提出请求时,我们检查他们的会话ID是否与我们为他们存储的会话ID匹配。如果它不匹配,那就意味着有其他人登录了!因此我们可以安全地注销它们。
的实施
我们将利用3件事情。 会话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);
}
}
现在,我们需要实际检查用户是否应被踢出或没有,所以在所有的REQ的开始执行此美国:
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将自动登出? – Gerry
如果用户A从某个地方X登录,然后再次登录表单地点Y,则从A登录应该被注销。 – user2788596
请提供更多信息。你有什么尝试?什么没有用?这个问题是不可回答的,因为它是 – Martijn