首页新闻找找看学习计划

asp.net 解决同一账户同时登录问题!!!急急急急急急!!!

0
悬赏园豆:5 [待解决问题]

     最近做了一个项目,目前正在测试阶段,测试发现多个用户可以同时登录一个账号,

登录成功用Session保存的。不知道这是什么原因??、、

hslgmq的主页 hslgmq | 初学一级 | 园豆:45
提问于:2014-11-10 10:59
< >
分享
所有回答(8)
0

本来就可以登录同一个帐号的,如果你不限制的话。你想作啥?想限制一个帐号只能一个用户登录?

你得管理登录机制,写代码啊。后登录的怎么办?拒绝还是踢掉前一个?

爱编程的大叔 | 园豆:29784 (高人七级) | 2014-11-10 11:01

肯定不能同时登录啊,就像qq,一但同时登录就会提示已经登录了

支持(0) 反对(0) hslgmq | 园豆:45 (初学一级) | 2014-11-10 11:02

@hslgmq: 当年马化腾专门就这个问题也问过我的啊,我让他去写代码才解决了同时登录问题的。

不过现在手机和电脑是可以允许双登录的,只是不允许电脑双登录而已。

支持(0) 反对(0) 爱编程的大叔 | 园豆:29784 (高人七级) | 2014-11-10 11:05

@爱编程的大叔: 这个代码怎么写的呢?能给点思路吗?我现在想 在数据库里面建一个登录表来记录用户登录的状态等信息,然后判断该账号是否已经登录,这样是不是比较麻烦啊,大神?

支持(0) 反对(0) hslgmq | 园豆:45 (初学一级) | 2014-11-10 11:13

@hslgmq: 请问马化腾和您是什么关系啊?

支持(0) 反对(0) hslgmq | 园豆:45 (初学一级) | 2014-11-10 11:11

@hslgmq: 可以在数据库的用户表直接加多一个字段,也可以另外建一个表,也可以在IIS的全局缓存中建一个已登录的用户表,反正需要处理的,不过小系统就算了,没有人计较多登录的,甚至有人需要多登录....

支持(0) 反对(0) 爱编程的大叔 | 园豆:29784 (高人七级) | 2014-11-10 11:31
0

......先把基础学好.你有考虑要实现账户只能在一个地方登录需要哪些条件吗?

吴瑞祥 | 园豆:28675 (高人七级) | 2014-11-10 11:30
0

一般就是数据库给个标识字段,登录了就不能登了,不过有异常退出的情况,建议做巡检,没有占有就判断它下线了

风醉 | 园豆:1195 (小虾三级) | 2014-11-10 11:47

怎么巡检?

支持(0) 反对(0) hslgmq | 园豆:45 (初学一级) | 2014-11-10 11:48

@hslgmq: 有个全局啥方法,你定时比如5分钟啊,看看这个账号是否活动,这个应该不难吧,即客户端向服务端发送账户活动信息(就是个全局变量或者标识啥的),然后服务端你定时执行看看这个账户的活动标识是否活动,超过多长时间没活动,代表是异常退出了,你就更新数据库登录标识为退出,这个细节性的东西还有很多

支持(0) 反对(0) 风醉 | 园豆:1195 (小虾三级) | 2014-11-10 11:53

@风醉: 没有必要吧,Session退出时,就更新可以吧

支持(0) 反对(0) hslgmq | 园豆:45 (初学一级) | 2014-11-10 11:54

@hslgmq: 细节真的很多的。实现不好的话,用户体验更差。还不如允许多登录呢。

支持(0) 反对(0) 爱编程的大叔 | 园豆:29784 (高人七级) | 2014-11-10 12:11

@爱编程的大叔: 不知道你说的多登录是什么?现在的问题是,同一个角色,不同电脑可以同时登录,这肯定是异常

支持(0) 反对(0) hslgmq | 园豆:45 (初学一级) | 2014-11-10 12:18

@hslgmq: 哈哈,我们的系统已经这么异常运行了十多年了。

支持(1) 反对(0) 爱编程的大叔 | 园豆:29784 (高人七级) | 2014-11-10 12:21

@爱编程的大叔: 好吧,系统要求需求不同吧。谢谢

支持(0) 反对(0) hslgmq | 园豆:45 (初学一级) | 2014-11-10 12:22

@hslgmq: 你可能奇怪为什么得到这样的回答,因为你问得让人觉得不专业。

1、所有的特性不是天生的,是需要程序员设计出来的。可能你是软件公司,还要检查同时连接人数。

但有时候界面设计不理想,其实用户是希望可以同时开两个浏览器,同时登录,一个作参考,一个作数据录入的。

2、至于为什么用Session 退出更新会可能有问题呢,那是因为可能异常退出。然后你SESSION保留了几个小时,那个用户不得疯了。

3、所以真要设计,可以考虑加上心跳机制(也就是楼上说的巡检),整个下来你得当一个重要的特性开发加测试,弄个几周也是正常的。

支持(0) 反对(0) 爱编程的大叔 | 园豆:29784 (高人七级) | 2014-11-10 12:35

@爱编程的大叔: Agree +1

支持(0) 反对(0) 风醉 | 园豆:1195 (小虾三级) | 2014-11-10 12:38

@风醉: 其实也不然,你的目的无非就是不让一个人同时能干N件事请,专业术语 叫 “单点登入”

你要解决的不是A登入后限制B登入,而是B登入后把A踢掉。就类似于QQ的被迫下线样。从体验方面来讲后者也要优于前者。如果说思考的方向一开始就是错误的,那无非是自己给自己找罪了,你说呢?

支持(0) 反对(0) AshEs丶 | 园豆:251 (菜鸟二级) | 2014-11-11 17:02

@Poison゜: 在公司OA就有高层要求这种,是觉得没多大意义,至少说通过这个来做好保密信息没多大效果,但是上面要求,你只能想办法解决

支持(0) 反对(0) 风醉 | 园豆:1195 (小虾三级) | 2014-11-11 17:07
0

你可以设置一个标志物。这个人登陆了就设置为1。如果不是1让他登陆。如果是1 直接给提示

我是糖糖 | 园豆:446 (菜鸟二级) | 2014-11-10 13:25
0

session有个sessionId标志它,和他存什么值没有关系。

他和客户端(浏览器)有关系的!

譬如我用火狐和谷歌浏览器 用同一个账号访问登录你说的那个系统,你的处理程序会存两套session!

我用一个浏览器开两个窗口分别登录你的这个系统,你的处理程序会存一套session,后一个登录的session会覆盖前一个登录者的session

0.617 | 园豆:410 (菜鸟二级) | 2014-11-10 16:16
0

想一次限制一个登录帐户 可以在Account表里加个 字段 Ticket

每次登录成功后,把 Ticket 更新下,再缓存住,然后把新的Ticket存到 Session或者 Cookie(建议)

然后每次验证是否登录,再验证下Ticket是不是和缓存中的一致。

南昌炒粉 | 园豆:714 (小虾三级) | 2014-11-11 01:52
0

其实也不然,你的目的无非就是不让一个人同时能干N件事请,专业术语 叫 “单点登入”

你要解决的不是A登入后限制B登入,而是B登入后把A踢掉。就类似于QQ的被迫下线样。从体验方面来讲后者也要优于前者。如果说思考的方向一开始就是错误的,那无非是自己给自己找罪了,你说呢?

AshEs丶 | 园豆:251 (菜鸟二级) | 2014-11-11 17:03
0

刚做了这个功能 

asp.net 学习交流群 130017551,下面就是你要的东西

http://www.cnblogs.com/sanjia/archive/2010/01/19/1651835.html

iisp | 园豆:81 (初学一级) | 2014-12-12 17:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册