思路:  定义一个全局静态变量  vactor  或者collection 用来存储用户ID  用户一旦登陆,先检查用户ID是否在其中,在,就撞到你枪口上,不在,就把用户ID存储进去,让用户正常登陆。

解决方案 »

  1.   

    在某一个session里能够获得当前连接到服务器的所有session的信息吗?
      

  2.   

    1、在用户表里设置一字段,记录用户是否登陆;
    2、在用户表里再设置一字段,记录用户最后一次操作的时间;
    3、用户登录时,判断是否已登录,如果已登录,提示他已经登录陆,或者上次登录未正常退出,请20分钟(假设你设定的session有效时间为20分钟)后再尝试登录;否则正常登录
    3、提供正常退出链接,用户点击该链接,则将该字段置为未登陆;
    4、对于未正常退出,每分钟启动一个线程,检查已登录的用户的最后一次操作的时间,如果超过了20分钟(刚好是session失效的时间,而session失效也是非正常退出的主要原因),则将其状态置为未登陆,注意,此时只检查登陆状态为已登陆的用户记录!这是一个思路吧,应该可以实现的。缺点在于用户非正常退出后,必须等待一段时间后才能再次登陆! 另外就是每分钟自动启动的线程,其代码一定要高效,否则会影响系统效率。要是session有onLost事件就好了,呵呵,像javascript的onBlur,Onchange事件,监听之,处理之!!!!
      

  3.   

    我起初想过这个办法,就是觉得非正常退出,如非法操作和突然断电时不好处理,其它如正常退出,或者关闭浏览器都是可以触发事件的,这才有机会修改数据表中的记录,否则下次就无法正常登录了。
    phoenix_zd(天马行空)的思路可以一试,就是这个自动启动的高效线程,呵呵,得好好琢磨一下。
      

  4.   

    _____在用户表里再设置一字段,记录用户最后一次操作的时间
    这个如何处理?
    例如:用户一直向服务器发出请求,连接到不同页面,此时用户并不超时,只是没有执行与数据库相关的操作,总不是每个请求都要记录吧,这样服务器的负担加大了。
    我感觉服务器端,肯定可以获得各个session的信息,否则它如何判断用户超时?但是不知道具体该如何实现
      

  5.   

    phoenix_zd(天马行空) 的办法还是很有道理
    UP
      

  6.   

    该如何记录用户的最后一次操作?不是要每个事件都写数据库吧,这也做不到阿。
    好像以前在哪儿看到过一个用servlet的解决方案,做法好像是可以把获得的session信息记录在一个文件里,每次都查询该文件。好像挺麻烦的。
    忘了在哪儿看到的了,郁闷。
      

  7.   

    我觉得phoenix_zd(天马行空)的思路太复杂了,用session监听器直接能实现的,还用什么数据库啊?缺点同样一旦非法退出,需要session失效才能登陆。但好像所有软件都是这样样子的
      

  8.   

    是啊。自己写个sessionlistener 监听一下了使用HttpSessionBindingListener 接口
      

  9.   

    有没有session监听器的例子阿?借鉴一下怎么使用。
    一开始就说了:在网上搜了一下,有人说用session监听器,可是不是很明白具体怎么实现。
      

  10.   

    在Application中存放用户名:
      Servlet中:
        String name=request.getParameter("name");
        if(getServletContext().getAttribute(name)!=null){
          //本用户名已注册过,即重复登录
        }else{
           getServletContext().setAttribute(name,"登录");
        }  Jsp中:
        String name=request.getParameter("name");
        if(application.getAttribute(name)!=null){
          //本用户名已注册过,即重复登录
        }else{
           application.setAttribute(name,"登录");
        }
      

  11.   

    在Application中存放用户名,应该是永远有效的吧?
    成功登录议会以后,下回怎么登录?
      

  12.   

    在网上找了一下:
    Session代表客户的会话过程,客户登录时,往Session中传入一个对象,即可跟踪客户的会话。在Servlet中,传入Session的对象如果是一个实现HttpSessionBindingListener接口的对象(方便起见,此对象称为监听器),则在传入的时候(即调用HttpSession对象的setAttribute方法的时候)和移去的时候(即调用HttpSession对象的removeAttribute方法的时候或Session Time out的时候)Session对象会自动调用监听器的valueBound和valueUnbound方法(这是HttpSessionBindingListener接口中的方法)。因此,再结合Application,在调用valueBound方法时,执行application.setAttribute(name,"登录"),退出或者timeout时,调用valueUnbound方法,执行application.RemoveAttribute(name),大概可以实现。缺点也是一旦非法退出,需要session失效才能登陆。
      

  13.   

    在jsp中如何实现session监听器啊?有HttpSessionBindingListener对象吗?
      

  14.   

    // SessionListener.java
    import java.io.*;
    import java.util.*;
    import javax.servlet.http.*;//监听登录的整个过程
    public class SessionListener implements HttpSessionBindingListener
    {
    public SessionListener()
    {

    } public void valueBound(HttpSessionBindingEvent event)
    { } public void valueUnbound(HttpSessionBindingEvent event)
    {
    }}
    sission,application是jsp的内建对象,servlet怎么设置application的属性?
    对servlet没什么认识的说