日期:2014-05-17  浏览次数:20475 次

单点登录问题,1个账号只能在1个地方登录,怎么做?
现在做项目碰到一个问题,
就是想 1个账号只能在1个地方登录,
第一个人用这个账号在1台电脑登陆后
第二个人用这个账号在另1台电脑登录

这时如果第1个人再看一些登陆后才能看的页面,就会显示 此账号已经有人在别处登录。然后自动退出

请高手们讲一下 具体的原理。谢谢了

------解决方案--------------------
超简单的问题,我们在用户表那儿添加多一个INT列,这个专门放随机数,每登陆一次,随机数就变化一次,并将随机数放在cookies或seeion中,每每读取和数据库的作对比,如果发现不对,就说明,别人己在另一个地方登陆了,这时就弹出“己在另一地方登陆”,然后关闭窗口,这样就行了。
------解决方案--------------------
引用:
系统中一个LoginSession表(sessionId,UserId,ip,expireDate)

登录成功后,检查单点登录策略,如果当前是不允许多个地方登录,那么就清空LoginSession中当前UesrId的记录。同时,把当前Session记录起来,同时返回一个token{sessionId,userId}给客户端。

每次和服务端的请求,都要到LoginSession中校验这……


我的回复怎么没有楼主反馈?楼主看不懂,还是不屑于看?

我的解决方案是支持多网站SSO应用的
------解决方案--------------------
引用:
引用:
超简单的问题,我们在用户表那儿添加多一个INT列,这个专门放随机数,每登陆一次,随机数就变化一次,并将随机数放在cookies或seeion中,每每读取和数据库的作对比,如果发现不对,就说明,别人己在另一个地方登陆了,这时就弹出“己在另一地方登陆”,然后关闭窗口,这样就行了。


这个好像可行,不过要频繁读取用户表啊!!是不?


把字段在登陆时存在session里,在对比,存个登陆时间对比就行了
------解决方案--------------------
单点登录只有一个数据库,其中某个表来存储用户登录的状态,可以将之做成一个WebService

每次有用户登录从该service返回一个识别码,
如A用户登录返回识别码:myuser001
B用户登录返回一个识别码:myuser002

此时A用户访问其他需要验证Session的页面时,返回了验证码myuser002(最后一次用户登录的识别码),与A用户登录时返回的验证码myuser001不一致,就把A用户踢出系统

具体细节需要你自己考虑