用一个Applet来保持与服务器的Socket连接,
服务器端用一个实现线程的Servlet(不应该用jsp),在它的方法init中启动一个线程,并打开一个ServerSocket端口,在web.xml中这样配置(不要给它加servlet-mapping)
  <servlet>
    <servlet-name>applet</servlet-name>
    <servlet-class>your servlet name</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
只有这样才能真正的精确记录用户的上线与下线的时间,及上线的总时间,其它方式都是不精确的,
因为http协议是无状态的,它不保持用户状态,所以每次连接都是一个新的连接。而WEB服务器用的会话是由WEB服务器提供的,它无法精确知道用户什么时候离开(比如用户端死机就没法知道了)

解决方案 »

  1.   

    可不可以通过jsession来记录用户的id
      

  2.   

    用b/s结构是不可能的,
    改用c/s吧,
    JSP只能知道上线的时间,但不可能精确的知道下线的时间!!!!!
      

  3.   

    一个用户在同一台机器上用两个不同的帐号登陆系统,如何取得这两个用户的userid,除了appliction
    还有别的方法吗
      

  4.   

    当一个用户在一个机子上同时用两个帐号登陆时,如何记录
    -------
    你是说一个用户在同一台机子同时用两个不同的帐号登陆?
    这还不简单,只要在登录的时候把用户的IP和时间记录下来存入数据库,
    另一个用户登录时就可以用这两个字段判断是不是在同一台机子登录了,比如你可规定相隔一个小时之内登录的用户如果IP相同就是在同一台机子登录的,
    当然这不可能做的很精确的,B/S的弊端,这方面C/S好多了。
      

  5.   

    public class onLineUser implements HttpSessionBindingListener {
      

  6.   

    对于下线时间,用户关闭浏览器时候,可以调用unload时间,然后转向一个jsp处理下线时间。