求助,网站上面同一账号同一时间内只允许登录一次,如果当前账号已经登录了,那么第二个人再登录的时候则要提示“账号登录中”,同时可以选择强制对方下线,第二个人则可以登录成功,同时要提示第一个登录的人,“此账号在别处登录”!
我初步想法是在数据库中新建一个表,包括当前登录都ID,标识登录,当前Ip,第一次登录的时候可以向库中插入一条记录,标识已经登录,这样的话第二次登录的时候可以进行友情提示,但是如果第二次登录时候要强制另外一个下线的话那即时提示该怎么做啊?
我是用的SSh框架
我初步想法是在数据库中新建一个表,包括当前登录都ID,标识登录,当前Ip,第一次登录的时候可以向库中插入一条记录,标识已经登录,这样的话第二次登录的时候可以进行友情提示,但是如果第二次登录时候要强制另外一个下线的话那即时提示该怎么做啊?
我是用的SSh框架
也可以在SQL中事件回滚,
也可以后台程序处理
希望对你有帮助
如果存在可以提示该账号一定登录 或者清除已经存在的session中用户信息提出上个登录的用户
向页面发送信息你这样做之后是可以 用户注销了 你可以清除数据库信息但是用户非法关闭浏览器 你的数据库就一直是之前的数据不晓得你考虑了没有??
表字段中把IP地址和是否在线记录下来
当登录时,直接去数据库查询数据,通过状态和IP地址来判断,如果IP地址跟当前的IP地址不一致且状态为在线,则强制其下线,同时根据IP地址的不同,给出不同的提示信息。此时要做好IP地址的更新。
楼上讲IE非法关闭的话,对于我说的情况也可以来处理掉。同样一个IP地址登录N次,也不会提示被迫下线!
感觉你把问题扩大话了。。服务器端的Session可能是存在的,这种问题没法避免。。即使要做,也只能参考一下服务器端对Session状态的监控,如果isActive,那也是要提示注销之前的登录信息,notActive就无所谓了。。可以直接登录了。
“用这个表来展示用户在线信息 ,那不是显示会有误”
这个怎么会有误呢?Session超时了,那你看到的数据能有什么参考意义吗。结合一下实际,想想这种情况可能存在吗?
判断登录标识是否为空 为空者无人登录 直接把自己的标识UPDATE上去
如果不为空 就要判断这个标识和自己的标识是否一致 一致不处理登录即可,
如果标识不一致,调用一个方法把另一个标识传进去 程序进行判断 当传入的标识==客户端的标识是 就在这个客户端 弹出信息框 (程序是在服务器上面跑的)
大概就是这个意思
是的,我考虑的多了,呵呵不是 我的意思是通过表里面的 用户登录标示 进行判断, 如果非法关闭 ,那这个标示是没有改变的,所有我遍历表的时候 这个数据是有的,这个也是,表里面存了sessionID 那么把在线的数据调出来 再进行sessionId的判断,这样就是有些数据了所有在用户点击在线用户的时候就要加一个操作 看sessionId是否有效,在把数据库的信息改掉
如果你希望限制单个用户只能登录到你的程序一次,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>
第二次登录将被阻止。