判断用户是否已登陆?还有就是如果有很多个用户,是不是要一个一个判断???
还是有更好的办法?最好有代码

解决方案 »

  1.   

    用户登录后把用户信息放到session里,每次登录的时候判断session是否有,如果有,就说明用户重新登录
    超时也是一样,超时了,session就清了,用户就不存在了伪代码:User user = (User)request.getSession().getArribute("user",user);  //从session中取用户request.getSession().setArribute("user",user);   //把用户放到session中
      

  2.   

    zb_86 的方法不可用,因为SESSION是浏览器管理的,放置了SESSION只能是在当前打开的浏览器存在,如果另一个用户使用另一台计算机登陆,这时候捕获的SESSION为null,所以还是认为没有登陆.
    我建议可以使用下面两种方法:
    1,给数据库USERINFO表中加一个用户登陆状态的标记,登陆时判断一下该用户是否登陆
    2,可以将用户登陆信息放在application中来判断是否已经登陆
      

  3.   

    嗯,用表来即时判断比较好,用户少的可以用session
    另外,需要判断用户退出时的错误处理!!!
      

  4.   

    代码自己google找,思路如下:
    在用户表加2个字段 一个存用户的状态 一个存登录的ip 这样二次登录不上的时候可以给用户一个准确提示在那个ip上登录
    当用户点退出 按钮 或者session 超时,都好弄,只要在调用sessionDestroyed() 监听的方法 ,对数据库进行更新就可以了,关键难得是你怎么监听到用户点浏览器的关闭按钮,用户点浏览器的关闭按钮它是不会很快自动调用
    sessionDestroyed()方法的。 提示:监听到用户点浏览器的关闭按钮 用js方法 。具体代码记不得了,googler搜索下
    在js方法里再调用 action 或者serverlet 。
     
    用户 登录时就不说,很简单
      

  5.   

    我做的方法是数据库中加一个在线表  记录用户sessionID 用户名 最后活动时间
    当用户与我的服务器有交互时更新最后活动时间登录时遍历这张表就能知道是否是重复登录
      

  6.   

    我是说别人在这台机器上登陆了,用user1
    另外一个人在另一台机器上也用user1登陆就提示!!用户已登陆
    也许liushoucang 的方法,可以试试...
      

  7.   

    哦,原来是这个需求啊,是我理解错了。
    用表是个方法,但有一些缺陷:
    1,性能下降
    2,万一系统down了,数据库表没有及时更新,就意味着已登录的用户永远无法再登录了我的建议是:
    1,如果用户帐号是唯一的,完全可以在用户登录后,把用户的信息放在Application中,这样就完全保证了只能有一个用户登录
    2,如果用户帐号不是唯一的,用表的话,最好加上触发器
      

  8.   

     ArrayList list = null;
                    //调用登陆方法
                    list = infoDao.infoSelect(name, pwd, actor);
                    if (list != null) {
                        //用for循环取list的值
                        for (int i = 0; i < list.size(); i++) {
                            //StuInfoBean来接收
                            StuInfoBean bean = (StuInfoBean) list.get(i);
                            //把姓名和角色放到session里去
                            se.setAttribute("name", bean.getStuName());
                            se.setAttribute("actor", bean.getActor());
                            se.setAttribute("actor",actor);
                            //判断list不等于null
                            if (actor.equals("学生")) {
                                //判断actor是学生
                                //用学生的状态来判断学生是否第一次进来                            if (!bean.getComputer().equals("1")) {
                                    //只要学生进来过就不给生进去!
                                    out.print(
                                            "<script>alert('你已经登录过一次想登录在请联系老师');window.location='login.jsp'</script>");
                                    //给他跳到页面
                                    // request.getRequestDispatcher("/login.jsp").forward(request, response);
                                    //response.sendRedirect("/WebRoot/login.jsp");                                //  request.getRequestDispatcher("login.jsp").forward(request, response);
                                } else {
                                    //用学生的状态学生第一次进来
                                    //调用更新状态                                //获取计算机的IP地址
                                    String Conputer = request.getRemoteHost();                                //进行自动更新学生的状态
                                    if (infoDao.infoUpdata(bean.getId(), Conputer)) {
                                        request.getSession().setAttribute("id",
                                                bean.getId() + "");                                    String ClassName = infoDao.getStuClass(
                                                name);
                                        getServletContext().setAttribute(
                                                "className", ClassName);//                                    request.getRequestDispatcher(
    //                                            "/student/stuAns.jsp").forward(
    //                                            request, response);
                                        response.sendRedirect(
                                                "/WebRoot/student/stuAns.jsp");
                                    }
      

  9.   

    我曾经回答过这个问题,你参考一下吧,里面的代码是现成的,用application解决的
    http://topic.csdn.net/u/20071218/17/ba4861a2-94a7-46b2-9d85-b2d17008820e.html
      

  10.   

    在不同的机器上可行吗?断电的情况是否可行?
    我研究一下明天,整明白了就结贴
    kke_007和olivesoup  这两位的也许可行
    kke_007能说下哪个是在类里,哪个是在JSP里的代码吗?
      

  11.   

    先问一下,在数据库中没有一个属性判断表示用户是否在线吗?
    就是没有那只能用 HttpServletSession 了,前面有几位答的很好
      

  12.   

    >在不同的机器上可行吗?
    当然可行,当时重点就是解决这个问题>断电的情况是否可行?
    遗憾,当时没有测试断电情况,你可以试一下,有什么问题留言,我还会关注
      

  13.   

    kke_007 这位的似乎不太合适
    olivesoup 冬瓜的应该可行,不过图片看不到了..
    不是STRUTS的,正在试,呵
      

  14.   

    是不是struts的无所谓啊,只要你用servlet就行欢迎测试,共同改进!我也奇怪为什么图片看不到,我当时在公司发的,回家就看不到,现在也只能在公司的机器上看到,
    难道我传的图片只有我一个人能看到??感觉csdn并没有获取我的图片,只是拿了我的链接
    真不知道这个论坛是怎么做的,bug一堆堆的
      

  15.   

    在数据库里多加一个字段记录登录时间,在每次登录的时候都会把登录时间update到数据库,同时也把它存在session里。然后再弄个过滤器,这个过滤器用来对比session里的时间跟数据库里的时间是否一致,如果不一致,就销毁session。这样,应该可以保证得了只有最后登录的用户才有权限吧?
      

  16.   

    简单办法是 让后登陆的冲掉前面登陆的
    建立一个 HashMap (登陆者名称,登陆者session)
    当新的成功登陆就 检查 这个登陆名否有SESSION在了 存在就 清空这个SESSION(这样第一次登陆者SESSION就空了)
    然后放置新的SESSION进去session 结束事件中 添加 HASHMAP中的删除事件(要判断是否还是登陆状态)
      

  17.   

    最近学习的老师让我们做一个小的网站   遇到这样的问题了  之前用session做 觉得不够严谨