读书人

实现一个账号只能在一个客户端登录像

发布时间: 2012-05-27 05:42:30 作者: rapoo

实现一个账号只能在一个客户端登录,像QQ登录一样的效果
实现一个账号只能在一个客户端登录,像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;    } 


[解决办法]
mark~~
[解决办法]
哎,帮顶

[解决办法]

探讨
C# code

if (UserIsOnline(adminName))
{
...........
}




/// <summary>
/// 获取或设置在线列表
/// </summary>
public Hashtable OnlineUserList
{
get
{
if( HttpContext.Current.Application["OnlineUserList"] == null)
{
Hashtable onlineUserList = new Has…

[解决办法]
用Cache+Session很容易实现。
[解决办法]
数据表加多一列,是否登录
如果登录就设置为1
退出就设置为0
定期检查session("用户")

如果session("用户")
为空就把登录设置为0
[解决办法]
探讨
登录的时候
hash["a"] = a_ip;


在httpmodule里对每个请求检查:hash["a"]=当前IP,正常,否则,就提示下线,并执行下线操作。

[解决办法]
探讨
数据表加多一列,是否登录
如果登录就设置为1
退出就设置为0
定期检查session("用户")

如果session("用户")
为空就把登录设置为0

[解决办法]
探讨
C# code

if (UserIsOnline(adminName))
{
...........
}




/// <summary>
/// 获取或设置在线列表
/// </summary>
public Hashtable OnlineUserList
{
get
{
if( HttpContext.Current.Application["OnlineUserList"] == null)
{
Hashtable onlineUserList = new Has…

[解决办法]
10楼的方法不错,维护一个hash表,来保存所有登陆用户。
[解决办法]
最麻烦的是捕获退出事件!估计得定时和数据库通信,修改客户端的Session或者Cookie
[解决办法]
在数据库中保存登录时

间ession或cookie中保存登录时间

每次操作都比较数据库中的登录时间是否于session或cookie中的一至

如果不一致说明有别的账户登录

退出当前账户

读书人网 >asp.net

热点推荐