最近做了一个项目,目前正在测试阶段,测试发现多个用户可以同时登录一个账号,
登录成功用Session保存的。不知道这是什么原因??、、
本来就可以登录同一个帐号的,如果你不限制的话。你想作啥?想限制一个帐号只能一个用户登录?
你得管理登录机制,写代码啊。后登录的怎么办?拒绝还是踢掉前一个?
肯定不能同时登录啊,就像qq,一但同时登录就会提示已经登录了
@hslgmq: 当年马化腾专门就这个问题也问过我的啊,我让他去写代码才解决了同时登录问题的。
不过现在手机和电脑是可以允许双登录的,只是不允许电脑双登录而已。
@爱编程的大叔: 这个代码怎么写的呢?能给点思路吗?我现在想 在数据库里面建一个登录表来记录用户登录的状态等信息,然后判断该账号是否已经登录,这样是不是比较麻烦啊,大神?
@hslgmq: 请问马化腾和您是什么关系啊?
@hslgmq: 可以在数据库的用户表直接加多一个字段,也可以另外建一个表,也可以在IIS的全局缓存中建一个已登录的用户表,反正需要处理的,不过小系统就算了,没有人计较多登录的,甚至有人需要多登录....
......先把基础学好.你有考虑要实现账户只能在一个地方登录需要哪些条件吗?
一般就是数据库给个标识字段,登录了就不能登了,不过有异常退出的情况,建议做巡检,没有占有就判断它下线了
怎么巡检?
@hslgmq: 有个全局啥方法,你定时比如5分钟啊,看看这个账号是否活动,这个应该不难吧,即客户端向服务端发送账户活动信息(就是个全局变量或者标识啥的),然后服务端你定时执行看看这个账户的活动标识是否活动,超过多长时间没活动,代表是异常退出了,你就更新数据库登录标识为退出,这个细节性的东西还有很多
@风醉: 没有必要吧,Session退出时,就更新可以吧
@hslgmq: 细节真的很多的。实现不好的话,用户体验更差。还不如允许多登录呢。
@爱编程的大叔: 不知道你说的多登录是什么?现在的问题是,同一个角色,不同电脑可以同时登录,这肯定是异常
@hslgmq: 哈哈,我们的系统已经这么异常运行了十多年了。
@爱编程的大叔: 好吧,系统要求需求不同吧。谢谢
@hslgmq: 你可能奇怪为什么得到这样的回答,因为你问得让人觉得不专业。
1、所有的特性不是天生的,是需要程序员设计出来的。可能你是软件公司,还要检查同时连接人数。
但有时候界面设计不理想,其实用户是希望可以同时开两个浏览器,同时登录,一个作参考,一个作数据录入的。
2、至于为什么用Session 退出更新会可能有问题呢,那是因为可能异常退出。然后你SESSION保留了几个小时,那个用户不得疯了。
3、所以真要设计,可以考虑加上心跳机制(也就是楼上说的巡检),整个下来你得当一个重要的特性开发加测试,弄个几周也是正常的。
@爱编程的大叔: Agree +1
@风醉: 其实也不然,你的目的无非就是不让一个人同时能干N件事请,专业术语 叫 “单点登入”
你要解决的不是A登入后限制B登入,而是B登入后把A踢掉。就类似于QQ的被迫下线样。从体验方面来讲后者也要优于前者。如果说思考的方向一开始就是错误的,那无非是自己给自己找罪了,你说呢?
@Poison゜: 在公司OA就有高层要求这种,是觉得没多大意义,至少说通过这个来做好保密信息没多大效果,但是上面要求,你只能想办法解决
你可以设置一个标志物。这个人登陆了就设置为1。如果不是1让他登陆。如果是1 直接给提示
session有个sessionId标志它,和他存什么值没有关系。
他和客户端(浏览器)有关系的!
譬如我用火狐和谷歌浏览器 用同一个账号访问登录你说的那个系统,你的处理程序会存两套session!
我用一个浏览器开两个窗口分别登录你的这个系统,你的处理程序会存一套session,后一个登录的session会覆盖前一个登录者的session
想一次限制一个登录帐户 可以在Account表里加个 字段 Ticket
每次登录成功后,把 Ticket 更新下,再缓存住,然后把新的Ticket存到 Session或者 Cookie(建议)
然后每次验证是否登录,再验证下Ticket是不是和缓存中的一致。
其实也不然,你的目的无非就是不让一个人同时能干N件事请,专业术语 叫 “单点登入”
你要解决的不是A登入后限制B登入,而是B登入后把A踢掉。就类似于QQ的被迫下线样。从体验方面来讲后者也要优于前者。如果说思考的方向一开始就是错误的,那无非是自己给自己找罪了,你说呢?
刚做了这个功能
asp.net 学习交流群 130017551,下面就是你要的东西
http://www.cnblogs.com/sanjia/archive/2010/01/19/1651835.html