jsp中,当我一个用户已经登录之后,我该怎样去判断这个用户不能再其他电脑上再一次登录(或者是在我的电脑上同时登录两个同样的用户)呢?
求大家帮忙解决一下!先谢谢了
如果有人会在SSH中验证重复登录的,也可以来讨论一下

解决方案 »

  1.   

    Spring Security??是什么,没有听说过,能具体的说说吗?谢谢了?
      

  2.   

    1.用struts token可避免重复提交的问题。
    2.另外你还可以在数据库用户表中建个字段,默认为0(未登录),当用户登陆时判断该值是否为0,为0,改为1,返回登陆成功,为1,返回已登录
      

  3.   


    struts token  没有用过,怎么用的??
      

  4.   

    单点登录,和数据库没有关系,和struts也没有一毛钱的关系,只需要session和application就够了,
    程序逻辑如下所示:
    用户登录时,你这样写:User user = dao.login(userName, password);// 数据库中判断用户名和密码
    if (null != user) {// 表示用户存在
        session.setAttribute("user", user);// 把用户放进session中
        application.setAttribute(userName, session.getId());/* 把用户所在的sessionId放进application中,首先要明白一点,一个session对应一个浏览器,其次要注意一点,userName必须是唯一的*/
    }
    当用户访问到其他url的时候,你可以在过滤器或你的拦截器中这样写:User user = (User) session.getAttribute("user");// 从session中取出用户
    if (null == user) {// 未登录或者登录已经过期
        response.sendRedirect(request.getContextPath());// 跳转到首页或登录页面
    }
    String sessionId = (String) application.setAttribute(user.getUserName);
    if (null == sessionId || !sessionId.equals(session.getId())) {/*这说明用户已经在其他电脑或其它浏览器登录了,那么之前登录的session就无效了,自动被后面的登录给踢掉*/ 
        response.sendRedirect(request.getContextPath());// 跳转到首页或登录页面
    }
    chain.doFilter(request, response);// 通过验证,放行用户进入目标url
      

  5.   


    String sessionId = (String) application.setAttribute(user.getUserName);
    这里打错了,应该是:
    String sessionId = (String) application.getAttribute(user.getUserName);希望lz能理解这段逻辑
      

  6.   

    定义一个全局变量放登入用户ID,session超时或者用户退出 就删掉当前用户ID。   这个思路应该可以。以前做过。
      

  7.   

    可以将上一次登录过的用户信息存入session,再次登陆时看于session中的用户信息是否相同
      

  8.   

    Session 和 Application 作用域问题吧?
      

  9.   

    用户已经在其他电脑或其它浏览器登录了,为什么之前登录的session就无效了,自动被后面的登录给踢掉
      

  10.   

    登录后Session.setAttribute(“login”,“true”)登录的时候先取得#session.login,如果等于true就直接跳过登录页,否则就登录...
      

  11.   

    我上面说的还不能解决多个电脑同时登录,15楼的法子可行,除了session,还应加上application。用数据库就太什么了....
      

  12.   

    LZ可以查下session id 这方面的资料,它是唯一的,你可以从这方面入手.
      

  13.   

    http://www.blogjava.net/javagrass/archive/2011/08/01/355473.html
    你得知道怎么配置spring secutrity,     google一下
      

  14.   

    但问题是我用的jsp做的,没用SSH框架
      

  15.   


    "在security.xml中配置Hibernate ORM提供了三种继承映射策略"
    这个security.xml文件是什么作用?因为在平时的使用SSH框架的时候也没有用到这个文件,所以想请教一下
      

  16.   

    如果你要在SSH基础上集成spring security ,就需要配置
      

  17.   

    可以看看这个,http://blog.csdn.net/huiwenjie168/article/details/7028149,web项目用户重复登录真的不好判断,我之前也问过这个问题,但是没有找到很好的答案,最后就放弃,不过我也发现现在好多web网站都没有做用户重复登录问题,像csdn、百度等,不过我之前见过一种,我个人觉得很好,他是通过定时刷新实现的,如果重复登录后,他会提醒用户在别处已经登录是否确定下线,如果你不下线,那么对方就会接到同样的消息,然后他也不下线,那么你就会又接到消息,反正就是这样来回的提示,让这个账号不能在系统操作,直到一方退出后才可以正常操作!
      

  18.   

    google spring secutrity配置,网上一大堆
      

  19.   

    web估计不行把。。要控制用户职能一个登录 要借用硬件设备。。比如ukey每个ukey和一个用户进行绑定 。 。程序定时的检测ukey..
      

  20.   


    看看QQ是怎么做的吧,人家腾讯公司就做的很好!
    B/S登录有后者踢前者,真没数据库设字段一说!
      

  21.   


    楼主,请问是怎么解决的嘛?
    我现在也碰到这个问题了,
    我是使用SessionListener来记录用户的登陆的,登陆的时候,就存入Hashtable中,退出就从Hashtable中删除,session到期也从Hashtable中删除。
    但是这样确实有个问题,就是党用户异常退出,比如直接关闭浏览器,这时候Hashtable中的内容就没发清空了,session也不会到期,直到用户下一次登陆,比如第二天,依然会提示用户已登陆,因为Hashtable里面的东西没有删除!
    哎,有一种解决办法就是,用户关闭浏览器的时候,用JS执行退出的action,但是这样又有一个问题就是,当用户开了多个选项卡的时候,如果他只关闭一个选项卡,这样也会存在问题,不知道楼主是怎么解决的呢,谢谢。 
      

  22.   

    本人有个想法不知道可不可行,就是做个客户端和服务端的交互请求!如果客户端登录就向服务端请求,服务端接受请求存在session或map里面存key=uid(用户ID),value=time(请求时间),然后判断客户端提交的时间跟当前系统的时间间隔判断如果超过客户请求的时间间隔,服务端就把数据库的在线标记字段修改为在线或者下线状态!
      

  23.   

    这段时间也一直在做防止登录情况!我最后打算session我就不移除了,做个定时器间隔一分钟扫描一次!判断客户端请求,如果当前系统的时间和客户端的请求时间差超过60秒,那设置数据库用户的状态为0,这样下次登录只要判断数据库字段是0还是1,1表示已登录。