资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

告诉你ASP.NETMVC实现一个用户只能登录一次的方法

现在许多网站都要求登录后才能进行进一步的操作,当不允许多用户同时登录一个帐号时,就需要一种机制,当再登录一个相同的帐号时,前面登录的人被挤下线,或者禁止后面的人登录。这里实现的是前一种功能。

创新互联长期为成百上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为大厂企业提供专业的成都网站设计、做网站大厂网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。

实现原理:在服务器端记录登录的用户ID+SessionID,当重复登录时,根据用户ID用新的SessionID替换掉旧的SessionID,在需要单用户登录的操作时就可以判断SessionID是否匹配,不匹配则证明有其他人登录了你的账户,这时可要求重新登录或其他的操作。

实现步骤:1、登录时记录登录的用户ID+SessionID,可利用Application、Cache、数据库等。

2、写一个过滤器用于判断当前的用户ID和SessionID跟服务器记录的是否匹配以及不匹配时进行的操作。

3、在Session过期或者退出系统时释放资源。

步骤1:

private void GetOnline(string Name)
{
Hashtable SingleOnline = (Hashtable)System.Web.HttpContext.Current.Application[Online];
if (SingleOnline == null)
SingleOnline = new Hashtable();

Session[mySession] = Test;
//SessionID
if (SingleOnline.ContainsKey(Name))
{
SingleOnline[Name] = Session.SessionID;
}
else
SingleOnline.Add(Name,Session.SessionID);

System.Web.HttpContext.Current.Application.Lock();
System.Web.HttpContext.Current.Application[Online] = SingleOnline;
System.Web.HttpContext.Current.Application.UnLock();
}

说明:登录时将用户名(唯一标识符即可)传给该方法,该方法实现记录用户ID以及SessionID

步骤2:

public class LoginActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Hashtable singleOnline = (Hashtable)filterContext.HttpContext.Application[Online];
// 判断当前SessionID是否存在
if (singleOnline != null && singleOnline.ContainsKey(filterContext.HttpContext.User.Identity.Name))
{
if (!singleOnline[filterContext.HttpContext.User.Identity.Name].Equals(filterContext.HttpContext.Session.SessionID))
{
filterContext.Result = new ContentResult() { Content = < script>if(confirm(\'你的账号已在别处登陆,是否返回登陆页面重新登陆?\')){window.location.href=\'/Authentication/Login\';}else{window.close();}< /script> };
}
}
base.OnActionExecuting(filterContext);
}
}

说明:该过滤器用于判断是否存在重复登录的情况,过滤器怎么用这里就不多说了,若存在重复登录,则执行if语句内的处理方式,这里的处理方式是弹出个确认框,当然你也可以直接跳转到登录地址,看需要更改。

步骤3:

protected void Session_End()
{
Hashtable SingleOnline = (Hashtable)System.Web.HttpContext.Current.Application[Online];
if (SingleOnline != null && SingleOnline[User.Identity.Name] != null)
{
SingleOnline.Remove(Session.SessionID);
System.Web.HttpContext.Current.Application.Lock();
System.Web.HttpContext.Current.Application[Online] = SingleOnline;
System.Web.HttpContext.Current.Application.UnLock();
}
Session.Abandon();
}

说明:用于释放资源,该方法放置在Global.asax里面。


分享文章:告诉你ASP.NETMVC实现一个用户只能登录一次的方法
本文地址:http://cdkjz.cn/article/cjohsj.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220