求助,网站上面同一账号同一时间内只允许登录一次,如果当前账号已经登录了,那么第二个人再登录的时候则要提示“账号登录中”,同时可以选择强制对方下线,第二个人则可以登录成功,同时要提示第一个登录的人,“此账号在别处登录”!
我初步想法是在数据库中新建一个表,包括当前登录都ID,标识登录,当前Ip,第一次登录的时候可以向库中插入一条记录,标识已经登录,这样的话第二次登录的时候可以进行友情提示,但是如果第二次登录时候要强制另外一个下线的话那即时提示该怎么做啊?
我是用的SSh框架

解决方案 »

  1.   

    如果用struts,可以采用拦截器,
    也可以在SQL中事件回滚,
    也可以后台程序处理
    希望对你有帮助
      

  2.   

    可以用单点登录组件,也可以用ajax不停的校验,也可以在用户点击链接的时候校验
      

  3.   

    Spring Security很好很强大,很方便很牛X
      

  4.   

    简单的做法用拦截器在判断是登录请求时去session中 判断用户的信息是否存在
    如果存在可以提示该账号一定登录 或者清除已经存在的session中用户信息提出上个登录的用户
      

  5.   

    把登录的账号存入application, 另外一个登录时先在application中查找是否存在该账号,存在的话强制断开连接
      

  6.   

    你可以在表中多一个字段 存sessionId 单后一个用户登录号 获取表中的sessionId向服务器中选择这个Id
    向页面发送信息你这样做之后是可以  用户注销了 你可以清除数据库信息但是用户非法关闭浏览器 你的数据库就一直是之前的数据不晓得你考虑了没有??
      

  7.   

    其实你可以这样实现:
    表字段中把IP地址和是否在线记录下来
    当登录时,直接去数据库查询数据,通过状态和IP地址来判断,如果IP地址跟当前的IP地址不一致且状态为在线,则强制其下线,同时根据IP地址的不同,给出不同的提示信息。此时要做好IP地址的更新。
    楼上讲IE非法关闭的话,对于我说的情况也可以来处理掉。同样一个IP地址登录N次,也不会提示被迫下线!
      

  8.   

    在网上搜“SSO ”或者“单点登录”,一堆解决方案,有简单的也有复杂的现在业界流行的是用LDAP,用户信息不存入数据库
      

  9.   

    “电脑关闭了(现在家庭宽带都是拨号吧,每拨号一次就是新的Ip” 
    感觉你把问题扩大话了。。服务器端的Session可能是存在的,这种问题没法避免。。即使要做,也只能参考一下服务器端对Session状态的监控,如果isActive,那也是要提示注销之前的登录信息,notActive就无所谓了。。可以直接登录了。
    “用这个表来展示用户在线信息 ,那不是显示会有误”
    这个怎么会有误呢?Session超时了,那你看到的数据能有什么参考意义吗。结合一下实际,想想这种情况可能存在吗?
      

  10.   

    我的思路 更具你的需求来当你登陆时 在用户名和密码无误后 在数据库查询一次这个用户是否已经登录(这个登录是个登录标识,一般用IP好点),
    判断登录标识是否为空  为空者无人登录 直接把自己的标识UPDATE上去 
    如果不为空 就要判断这个标识和自己的标识是否一致 一致不处理登录即可,
                      如果标识不一致,调用一个方法把另一个标识传进去 程序进行判断 当传入的标识==客户端的标识是 就在这个客户端 弹出信息框 (程序是在服务器上面跑的)
    大概就是这个意思
      

  11.   


    是的,我考虑的多了,呵呵不是 我的意思是通过表里面的 用户登录标示 进行判断, 如果非法关闭 ,那这个标示是没有改变的,所有我遍历表的时候 这个数据是有的,这个也是,表里面存了sessionID 那么把在线的数据调出来 再进行sessionId的判断,这样就是有些数据了所有在用户点击在线用户的时候就要加一个操作 看sessionId是否有效,在把数据库的信息改掉
      

  12.   

    即然用spring了,何不用spring security,它有实现这样的功能 
      

  13.   

    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>
            
    第二次登录将被阻止。 
      

  14.   

    可以写个session监听器,当session自动失效时,将数据库的标识进行修改。
      

  15.   

    为什么这个论坛不能对某个人的言论进行评论或回复????人家说的是腾讯QQ那种一个账号只能在一台机器登陆的效果!什么单点登陆啊???单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。尼玛不要混淆了