实现一个账号只能在一个客户端登录,像QQ登录一样的效果解决办法
实现一个账号只能在一个客户端登录,像QQ登录一样的效果
实现一个账号只能在一个客户端登录,像QQ登录一样的效果!当一个账号已经在一个客户端登录后,然后在第二个客户端再用同一个账号登录时,第一个客户端掉线
例如:
admin 在A客户端登录。
B客户端也用admin登录。
这时候,A客户端出现admin账号在别的地方登录的提示,并掉线
不要思路。给个简单的实现代码
------解决方案--------------------
MARK ~
------解决方案--------------------
这种事情,别人只能给思路,而不是代码。
服务器端记录当前登录状态,如果用户已登录,则向第一个登录发送消息,迫使它下线。
------解决方案--------------------
登录的时候
hash["a"] = a_ip;
在httpmodule里对每个请求检查:hash["a"]=当前IP,正常,否则,就提示下线,并执行下线操作。
------解决方案--------------------
scoket维护用户列表
上线,下线,是否登陆维护.
------解决方案--------------------
实现一个账号只能在一个客户端登录,像QQ登录一样的效果!当一个账号已经在一个客户端登录后,然后在第二个客户端再用同一个账号登录时,第一个客户端掉线
例如:
admin 在A客户端登录。
B客户端也用admin登录。
这时候,A客户端出现admin账号在别的地方登录的提示,并掉线
不要思路。给个简单的实现代码
------解决方案--------------------
MARK ~
------解决方案--------------------
这种事情,别人只能给思路,而不是代码。
服务器端记录当前登录状态,如果用户已登录,则向第一个登录发送消息,迫使它下线。
------解决方案--------------------
登录的时候
hash["a"] = a_ip;
在httpmodule里对每个请求检查:hash["a"]=当前IP,正常,否则,就提示下线,并执行下线操作。
------解决方案--------------------
scoket维护用户列表
上线,下线,是否登陆维护.
------解决方案--------------------
- C# code
if (UserIsOnline(adminName)) { ........... } /// <summary> /// 获取或设置在线列表 /// </summary> public Hashtable OnlineUserList { get { if( HttpContext.Current.Application["OnlineUserList"] == null) { Hashtable onlineUserList = new Hashtable(); HttpContext.Current.Application["OnlineUserList"] = onlineUserList; } return (Hashtable)HttpContext.Current.Application["OnlineUserList"]; } set { HttpContext.Current.Application["OnlineUserList"] = value; } } /// <summary> /// 添加在线成员 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public bool OnlineUserList_Add(string key,string value) { try { if (OnlineUserList.Contains(key)) OnlineUserList[key] = value; else OnlineUserList.Add(key, value); return true; } catch { return false; } } /// <summary> /// 添加在线成员 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public bool OnlineUserList_Add(string key) { string value = DateTime.Now.ToString(); return OnlineUserList_Add(key, value); } public bool OnlineUserList_Delete(string key) { bool re = false; if (OnlineUserList.Contains(key)) { Hashtable userList = OnlineUserList; userList.Remove(key); OnlineUserList = userList; return true; } return re; } /// <summary> /// 判断用户是否在线 /// </summary> /// <param name="adminName"></param> /// <returns></returns> public bool UserIsOnline(string adminName) { OnlineClearUserOutTimeInOnLineList(); return OnlineUserList.Contains(adminName) ? true : false; } /// <summary> /// 删除超时在线用户 /// </summary> public void OnlineClearUserOutTimeInOnLineList() { Hashtable list = new Hashtable(); Hashtable temList = new Hashtable(); list = OnlineUserList; temList = new Hashtable(list); foreach (DictionaryEntry de in temList) { //删除超时 DateTime onlineTime = DataConverter.StrToDateTime( de.Value, DateTime.Now); TimeSpan timeSpan = DateTime.Now - onlineTime; //在线时间和当前时间间隔大于超时分钟数就删除(注:用户非法关闭浏览器) if (timeSpan.TotalMinutes >= (double) OnlineTimeOut) { list.Remove(de.Key); } } OnlineUserList = list; }