一个登陆账号,只能有一台电脑登陆,不能两台电脑同时用同一个账号登陆,如何做到?谢谢

andy0618 2012-08-29 04:47:46
一个登陆账号,
只能有一台电脑登陆,
当这个账号在登陆时,
假如另一台电脑用同样的账号登陆,拒绝登陆
如何做到
...全文
11659 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhack79 2013-09-16
  • 打赏
  • 举报
回复 1
都是净扯蛋的货们,现在CSDN也是一般水军的地方了。除了mysql等几个区,基本上都是净扯蛋。 application 是ASP的,如果用的是php python 咋整? 搞心跳包是找死,如果网速慢点,心跳没有跟上咋办,让我重新登陆吗? 写入字段,完全是个SB的作法,脑子里面进面粉了吗?明显不靠谱吗,还用脑子想吗? 还有用IP的,如果是网吧内,或局域网内咋处理,换个机器后就不让我上了吗?
z22708387 2013-03-18
  • 打赏
  • 举报
回复
给用户表增加一个登陆状态列. 然后登陆的时候 取得后判断状态列的状态. 登陆后改变状态. 退出后改变状态. 记住,还有意外退出的可能也要考虑.
Im_Sorry 2013-03-18
  • 打赏
  • 举报
回复
放入session里面把 登陆前,先检测里面的数据是否符合!
snfeifie 2013-03-18
  • 打赏
  • 举报
回复
目前最简单的方法就是在数据库加个字段列,对他进行判断,至于,用户非正常退出,只能是定时发送请求来判断。
爱在夕阳下 2013-03-15
  • 打赏
  • 举报
回复
获取SessionID 存起来 登录时 比较
zyshui 2013-03-15
  • 打赏
  • 举报
回复
单点登录就可以做到啊!
陈小潮 2013-03-15
  • 打赏
  • 举报
回复
怎么那么多人都不考虑非正常退出的情况?
yymandy001 2012-09-04
  • 打赏
  • 举报
回复
支持3楼.
zhanglong_longlong 2012-09-03
  • 打赏
  • 举报
回复
最简单的方法就是在数据库加个字段列,对他进行判断
sz_syy 2012-09-03
  • 打赏
  • 举报
回复
另外,在说一下 BS架构是无状态的,在数据库里加个字段,上线了就标识下,那下线了呢,你怎么知道下线了
sz_syy 2012-09-03
  • 打赏
  • 举报
回复
如果是BS的,可以这样做:
当有用户成功登录进来时,到了主页面了,实现代码
function showMsg() {
$.ajax({
type: "post",
url: "../../../asyn/OnlineUser.aspx?flag=0&data=" + new Date().getTime(),
beforeSend: function () {
},
success: function (data) {
},
error: function () {
// alert("出错");
}
});


}
setInterval("showMsg()", 6000);
以上代码是每隔一段时间去异步请求下后台,

后台处理代码(这里写得比较简单,主要是思路),
int UserId = Session["UserID"] == null ? 0 : Convert.ToInt32(Session["UserID"]);
if (UserId > 0 && UserName != "")
{
//这里是Dictionary<long,UserModel>里存在的,把时间更新更新到最新
if (UserManager.dic.ContainsKey(UserId))
{
//时间更新
UserManager.Update(UserId, DateTime.Now);
}
else //这里是新进来的用户添加到Dictionary<long, UserModel>
{
UserModel model = new UserModel();
model.UserID = UserId;
model.UserName = UserName;
model.LastActionTime = DateTime.Now;
model.DempName = DepartmentName;

model.SessionId = Session.SessionID;
UserManager.Add(UserId, model);
}
}

到了这里应该可以看得差不多了,就是当前登录成功的用户保存到全局的Dictionary<long,UserModel>
,当有用户退出时,删除掉,或者session失效时,删除掉,
在登录的时候,做下判断
if (UserManager.dic.ContainsKey(UserId_Dic))
{
DsCommon.PublicFunction.RegistScript(this.Page, "alert('当前用户处于登录状态,无法重复登录!');");
return;
}


这里要说明的是一个实现思路,有思路就好办了,代码不重要,这些代码也不够,还有很多没提到问题,自己在开发的时候会发现
高彬 2012-09-03
  • 打赏
  • 举报
回复
楼主可以结帖了,楼上的兄弟们已经都回答的很明确了。
我所知道的,常用的也就两种:
1、application,这个是全局共享的,所以用户登录后把相关的信息保存后,登录的时候再验证,就能做到一个账户只允许一人登录的需要。
2、在数据库里给用户表增加一个登录状态的字段。
cykb518 2012-09-03
  • 打赏
  • 举报
回复
哎 这些人 都认为是在学校里面做程序么?都不考虑非正常情况?即使在数据库里面加一个字段,让一个线程一直去跑,看这个用户在线没。如果没在线就改变状态。这种方式百分之百是有bug的,绝对过不了测试这一关。这种方式无法做到及时修改状态。还是20楼的稍微靠谱一点。
humin332 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]
在数据表里面对登录用户增加一个标识字段 弄bit 0 或 1 当用户登录了 就改写状态为 1 表示登录 退出后 改写回 0 。每次登录的时候查询这个字段的值 来判断是否登录
[/Quote]+++
凤老三 2012-09-03
  • 打赏
  • 举报
回复
放在session 或者cache 里面好点.
zou_yu_lin 2012-09-01
  • 打赏
  • 举报
回复
資料表中,一個是用來記錄訪問的IP,另一個則是用來記錄其狀態
net_grope 2012-09-01
  • 打赏
  • 举报
回复
加个是否登录的字段就行了啊,登录成功后字段改为1,再有登录时候看看这个字段是不是1,不是就可以登录,是的话就不能登录
c2415950573 2012-09-01
  • 打赏
  • 举报
回复
是base64 吗
c2415950573 2012-09-01
  • 打赏
  • 举报
回复
下面这样的字符串是什么加密算法的加密结果,急求

wrvwR67YAh00lZC3baOnnEfV9mqnCYlgZkzj8NvjY+a4fXdnceJ3q2pFCTjAUTiPw69OO4U7D6W4/QpDxkOheunj7T7owazkRKpb1Fno2d8FZSrNW6iHAVdLXSGKudKE46/jRMGb7ztJHynsw==
SallyAngela 2012-09-01
  • 打赏
  • 举报
回复
可以用数据库表字段来标识当前用户的登陆状态
每次登陆时判断当前用户状态,如果已登陆,就提示“已登录”,如果登陆ip不同则提示“用户账户可能被盗”,进行更深层的安全设置
加载更多回复(28)

62,041

社区成员

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

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

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

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