如何设置唯一登录,同一账号,同一时间只能登录一次

ll89691197 2011-01-25 01:06:49
求助,网站上面同一账号同一时间内只允许登录一次,如果当前账号已经登录了,那么第二个人再登录的时候则要提示“账号登录中”,同时可以选择强制对方下线,第二个人则可以登录成功,同时要提示第一个登录的人,“此账号在别处登录”!
我初步想法是在数据库中新建一个表,包括当前登录都ID,标识登录,当前Ip,第一次登录的时候可以向库中插入一条记录,标识已经登录,这样的话第二次登录的时候可以进行友情提示,但是如果第二次登录时候要强制另外一个下线的话那即时提示该怎么做啊?
我是用的SSh框架
...全文
2121 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
chide_007 2013-05-19
  • 打赏
  • 举报
回复
引用 20 楼 haidilee 的回复:
那么多人说单点登录,我很纳闷,单点登录是这个概念嘛?我以为单点登录是整合多系统,登录用户可以进行相互信任的访问
单点登入就是整合多系统的。
Wuzhengqiang123 2013-04-26
  • 打赏
  • 举报
回复
为什么这个论坛不能对某个人的言论进行评论或回复????人家说的是腾讯QQ那种一个账号只能在一台机器登陆的效果!什么单点登陆啊???单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。尼玛不要混淆了
roscius 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 haidilee 的回复:]
晕倒,破网速害的我回错地方了
[/Quote]

您回帖真不专业阿。
haidilee 2011-06-24
  • 打赏
  • 举报
回复
晕倒,破网速害的我回错地方了
haidilee 2011-06-24
  • 打赏
  • 举报
回复
那么多人说单点登录,我很纳闷,单点登录是这个概念嘛?我以为单点登录是整合多系统,登录用户可以进行相互信任的访问
wj594594520 2011-01-26
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 heardy 的回复:]
引用 12 楼 music_mouse 的回复:
这个怎么会有误呢?Session超时了,那你看到的数据能有什么参考意义吗。结合一下实际,想想这种情况可能存在吗?

是的,我考虑的多了,呵呵。。。

不是 我的意思是通过表里面的 用户登录标示 进行判断, 如果非法关闭 ,那这个标示是没有改变的,所有我遍历表的时候 这个数据是有的,

这个也是,表里面存了sessionID 那么把在线……
[/Quote]
可以写个session监听器,当session自动失效时,将数据库的标识进行修改。
iyan84 2011-01-25
  • 打赏
  • 举报
回复 1
2.3.3. 同步Session控制
如果你希望限制单个用户只能登录到你的程序一次,Spring Security通过添加下面简单的部分支持这个功能。 首先,你需要把下面的监听器添加到你的web.xml文件里,让Spring Security获得session生存周期事件:


<listener>
<listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class>
</listener>

然后,在你的application context加入如下部分:

<http>
...
<concurrent-session-control max-sessions="1" />
</http>

这将防止一个用户重复登录好几次-第二次登录会让第一次登录失效。 通常我们更想防止第二次登录,这时候我们可以使用

<http>
...
<concurrent-session-control max-sessions="1" exception-if-maximum-exceeded="true"/>
</http>

第二次登录将被阻止。

wpffeihuwpf 2011-01-25
  • 打赏
  • 举报
回复
即然用spring了,何不用spring security,它有实现这样的功能
heardy 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 music_mouse 的回复:]
这个怎么会有误呢?Session超时了,那你看到的数据能有什么参考意义吗。结合一下实际,想想这种情况可能存在吗?[/Quote]

是的,我考虑的多了,呵呵。。。

不是 我的意思是通过表里面的 用户登录标示 进行判断, 如果非法关闭 ,那这个标示是没有改变的,所有我遍历表的时候 这个数据是有的,

这个也是,表里面存了sessionID 那么把在线的数据调出来 再进行sessionId的判断,这样就是有些数据了

所有在用户点击在线用户的时候就要加一个操作 看sessionId是否有效,在把数据库的信息改掉
kala197 2011-01-25
  • 打赏
  • 举报
回复
不过这个标识一定要可以区分是本人 还是他人
kala197 2011-01-25
  • 打赏
  • 举报
回复
我的思路 更具你的需求来

当你登陆时 在用户名和密码无误后 在数据库查询一次这个用户是否已经登录(这个登录是个登录标识,一般用IP好点),
判断登录标识是否为空 为空者无人登录 直接把自己的标识UPDATE上去
如果不为空 就要判断这个标识和自己的标识是否一致 一致不处理登录即可,
如果标识不一致,调用一个方法把另一个标识传进去 程序进行判断 当传入的标识==客户端的标识是 就在这个客户端 弹出信息框 (程序是在服务器上面跑的)
大概就是这个意思
music_mouse 2011-01-25
  • 打赏
  • 举报
回复
“电脑关闭了(现在家庭宽带都是拨号吧,每拨号一次就是新的Ip”
感觉你把问题扩大话了。。服务器端的Session可能是存在的,这种问题没法避免。。即使要做,也只能参考一下服务器端对Session状态的监控,如果isActive,那也是要提示注销之前的登录信息,notActive就无所谓了。。可以直接登录了。
“用这个表来展示用户在线信息 ,那不是显示会有误”
这个怎么会有误呢?Session超时了,那你看到的数据能有什么参考意义吗。结合一下实际,想想这种情况可能存在吗?
ll89691197 2011-01-25
  • 打赏
  • 举报
回复
考虑了,但是不知道怎么做!
[Quote=引用 7 楼 heardy 的回复:]
你可以在表中多一个字段 存sessionId 单后一个用户登录号 获取表中的sessionId向服务器中选择这个Id
向页面发送信息

你这样做之后是可以 用户注销了 你可以清除数据库信息

但是用户非法关闭浏览器 你的数据库就一直是之前的数据

不晓得你考虑了没有??
[/Quote]
heardy 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 music_mouse 的回复:]
其实你可以这样实现:
表字段中把IP地址和是否在线记录下来
当登录时,直接去数据库查询数据,通过状态和IP地址来判断,如果IP地址跟当前的IP地址不一致且状态为在线,则强制其下线,同时根据IP地址的不同,给出不同的提示信息。此时要做好IP地址的更新。
楼上讲IE非法关闭的话,对于我说的情况也可以来处理掉。同样一个IP地址登录N次,也不会提示被迫下线!
[/Quote]

是的,但是要是我非法关机之后,电脑关闭了(现在家庭宽带都是拨号吧,每拨号一次就是新的Ip),在进行登录
那不是有提示吗? 其实用户却没有登录!

还有她要是现在用这个表来展示用户在线信息 ,那不是显示会有误..

呵呵!其实我一直在想好的方法解决问题!
qingyuan18 2011-01-25
  • 打赏
  • 举报
回复
在网上搜“SSO ”或者“单点登录”,一堆解决方案,有简单的也有复杂的

现在业界流行的是用LDAP,用户信息不存入数据库
music_mouse 2011-01-25
  • 打赏
  • 举报
回复
其实你可以这样实现:
表字段中把IP地址和是否在线记录下来
当登录时,直接去数据库查询数据,通过状态和IP地址来判断,如果IP地址跟当前的IP地址不一致且状态为在线,则强制其下线,同时根据IP地址的不同,给出不同的提示信息。此时要做好IP地址的更新。
楼上讲IE非法关闭的话,对于我说的情况也可以来处理掉。同样一个IP地址登录N次,也不会提示被迫下线!
heardy 2011-01-25
  • 打赏
  • 举报
回复
你可以在表中多一个字段 存sessionId 单后一个用户登录号 获取表中的sessionId向服务器中选择这个Id
向页面发送信息

你这样做之后是可以 用户注销了 你可以清除数据库信息

但是用户非法关闭浏览器 你的数据库就一直是之前的数据

不晓得你考虑了没有??
Diamond_Ace 2011-01-25
  • 打赏
  • 举报
回复
把登录的账号存入application, 另外一个登录时先在application中查找是否存在该账号,存在的话强制断开连接
zn85600301 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 ll89691197 的回复:]
求助,网站上面同一账号同一时间内只允许登录一次,如果当前账号已经登录了,那么第二个人再登录的时候则要提示“账号登录中”,同时可以选择强制对方下线,第二个人则可以登录成功,同时要提示第一个登录的人,“此账号在别处登录”!
我初步想法是在数据库中新建一个表,包括当前登录都ID,标识登录,当前Ip,第一次登录的时候可以向库中插入一条记录,标识已经登录,这样的话第二次登录的时候可以进行友情提示,但是如果……
[/Quote]
简单的做法用拦截器在判断是登录请求时去session中 判断用户的信息是否存在
如果存在可以提示该账号一定登录 或者清除已经存在的session中用户信息提出上个登录的用户
daisycool 2011-01-25
  • 打赏
  • 举报
回复
Spring Security很好很强大,很方便很牛X
加载更多回复(3)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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