实现一个账号只能在一个客户端登录,像QQ登录一样的效果

guohouchang 2009-03-16 11:23:59
实现一个账号只能在一个客户端登录,像QQ登录一样的效果!当一个账号已经在一个客户端登录后,然后在第二个客户端再用同一个账号登录时,第一个客户端掉线

例如:
admin 在A客户端登录。
B客户端也用admin登录。
这时候,A客户端出现admin账号在别的地方登录的提示,并掉线


不要思路。给个简单的实现代码
...全文
1250 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
magic_kid_2010 2012-08-29
  • 打赏
  • 举报
回复
当客户A登入服务器时,服务器记录客户A admin和它的socket。
当客户B登入服务器时,服务器记录客户B admin和它的socket。
因为此时登录了两个adin,为同一个账号。于是服务器取出客户A的socket,断开与其的通信。
space_2002 2012-05-24
  • 打赏
  • 举报
回复
不要思路。给个简单的实现代码
txiejun 2011-08-05
  • 打赏
  • 举报
回复
不要思路。给个简单的实现代码
我时来鄙视lz的
zhgq1123 2011-03-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 clonecenter 的回复:]

这种事情,别人只能给思路,而不是代码。

服务器端记录当前登录状态,如果用户已登录,则向第一个登录发送消息,迫使它下线。
[/Quote]
能给个好的解决方案也不错啊
xiatiandetonghua 2011-02-19
  • 打赏
  • 举报
回复
有难度
Adechen 2009-03-16
  • 打赏
  • 举报
回复
有难度,关注中.......
xuyiazl 2009-03-16
  • 打赏
  • 举报
回复
scoket维护用户列表

上线,下线,是否登陆维护.
iuhxq 2009-03-16
  • 打赏
  • 举报
回复
登录的时候
hash["a"] = a_ip;


在httpmodule里对每个请求检查:hash["a"]=当前IP,正常,否则,就提示下线,并执行下线操作。
CloneCenter 2009-03-16
  • 打赏
  • 举报
回复
这种事情,别人只能给思路,而不是代码。

服务器端记录当前登录状态,如果用户已登录,则向第一个登录发送消息,迫使它下线。
hbpolo 2009-03-16
  • 打赏
  • 举报
回复
MARK ~
冬天的糊涂神 2009-03-16
  • 打赏
  • 举报
回复
在数据库中保存登录时

间ession或cookie中保存登录时间

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

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

退出当前账户
Teng_s2000 2009-03-16
  • 打赏
  • 举报
回复
最麻烦的是捕获退出事件!估计得定时和数据库通信,修改客户端的Session或者Cookie
sjt000 2009-03-16
  • 打赏
  • 举报
回复
10楼的方法不错,维护一个hash表,来保存所有登陆用户。
浮生若梦丶 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 flashlove2008 的回复:]
C# code

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




/// <summary>
/// 获取或设置在线列表
/// </summary>
public Hashtable OnlineUserList
{
get
{
if( HttpContext.Current.Application["OnlineUserList"] == null)
{
Hashtable onlineUserList = new Has…
[/Quote]
up
flashlove2008 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 zzxap 的回复:]
数据表加多一列,是否登录
如果登录就设置为1
退出就设置为0
定期检查session("用户")

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


这种方法太不合适了,如果一个大流量的网站这样去做的话,可行吗?
zyip 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iuhxq 的回复:]
登录的时候
hash["a"] = a_ip;


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


正解

不想写httpmodule的话也可以在global.asax中实现
zzxap 2009-03-16
  • 打赏
  • 举报
回复
数据表加多一列,是否登录
如果登录就设置为1
退出就设置为0
定期检查session("用户")

如果session("用户")
为空就把登录设置为0
luafie 2009-03-16
  • 打赏
  • 举报
回复
用Cache+Session很容易实现。
春天的气息 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 flashlove2008 的回复:]
C# code

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




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

顶!
xupeihuagudulei 2009-03-16
  • 打赏
  • 举报
回复
哎,帮顶
加载更多回复(8)

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧