1.客户端做一个1秒刷新的页面 通过xmlhttp隐藏在其他页中,每秒通过这个页面获取的session向指定的servlet发送一下这个用户名  例如:http://127.0.0.1/a.jsp?name=tt 目的只要客户端一直存在可以获取session中的用户名
2.服务端将登陆的用户列表保存 根据每秒的客户端请求,来判断用户的session是否存在?问题 
现在想知道通过什么方法来获取到 当前列表中的用户的客户端是否向服务端发送了请求,如果没请求则通知session自动移除此客户端session。
把用户列表写入一个文件 格式为aa,bb,cc如果现在获取到客户端用户名为aa请求,bb cc 在规定时间内没有请求 ,如何能判断出来没有请求从而在列表文件中删除这2个用户 
请各位高手 给出思路,,,谢谢

解决方案 »

  1.   

    bb cc 在规定时间内没有请求java 的Timmer的类 还有  线程的sleep(1000)   不可以?
      

  2.   

    你想实现什么效果,只要网页开着,就永远不超时,关掉之后在指定的时间超时吗?既然网页打开的时候网页通过xmlhttp定时访问了服务端,那么这个session是永远都不会超时的,你只用在登录的时候设置一次用户信息到session,以后随时可以取到,另外每一秒访问间隔太频繁了,session一般默认30分钟超时,你10分钟访问一次就够了,访问的时候服务端代码不用做任何的动作,不用专门用list保存所有用户关掉网页后过一段时间自然就会清空这个session,超时时间在web.xml里设置。
      

  3.   


    在服务器端开条线程处理LZ 是不是主要判断用户是否在线?1.客户端做一个1秒刷新的页面 通过xmlhttp隐藏在其他页中用户人数1多 或者 用户开了几个页面服务器压力感觉满大的感觉没必要每秒刷新
      

  4.   

    是的  
    还有就是 如果用户本地登陆 突然断网或停电了 马上去其他机器登陆 如果session 有时间 那么可能会认为用户在线  不允许登陆 
    只有这样 与客户端保持连接 在最短时间内失去与客户端通讯后,会马上在服务端清除session,用户才会马上可以登陆
      

  5.   

    为什么要把用户列表存成文件
    存成Map就行了,key为用户名,value为过期时间。
    比如:
    aa, '12/02/2010 11:09:11'
    bb, '12/02/2010 11:09:11'
    用户aa每次发送请求更新过期时间为 当前时间+预期请求间隔另建一个timertask类,循环检查用户列表当前时间,如果当前时间>map中改用户的过期时间则清楚改用户的session
      

  6.   

    感觉把问题搞复杂了,我提供一个思路:
    1、你将session的超时时间设为一分钟,每隔30秒用ajax方式向服务器报到一次。
    2、建一个静态的map
    3、利用sessionListener,当新的session建立时,map.put(sessionId,用户名),session销毁时
       map.remove(sessionId);
    4 、登陆时,到map中找有没有相同用户名的,有就不让登。
      这样,如果断电断网,用户的确是不能在别的机子上立即登,要等一分钟,但我想一分钟基本上应该没问题  吧。
      

  7.   

    session ++--不可以吗?如果制动发送是1分钟,session就设成61秒。这样就可以判断了啊,取不到就说明没发送。
      

  8.   

    比如说你的timertask类运行的当前时间是12/02/2010 11:09:13
    而map中的数据是
    aa, '12/02/2010 11:09:11'
    bb, '12/02/2010 11:09:14' 
    循环检查map中的元素,发现当前时间(12/02/2010 11:09:13)> aa的过期时间'12/02/2010 11:09:11', 则说明aa用户的session应该被清除。当然不管怎样1s的时间间隔感觉是不合适的
      

  9.   

    楼主没有必要这样做
    session有个失效时间 过了失效时间会自动注销的
    失效时间可以在web.xml中配置 默认为30分钟
      

  10.   

    没太明白session不是有生命周期的么
      

  11.   

    这个需求的合理性,还是有待研究的。 客户端的网页会不停向服务器段发送请求,就是说用户一旦登录就算什么也不操作session也是永远不会过期的。
    这样如果用户在一台电脑登录后。如果用户忘记关闭网页而离开。 那么如果网页不关闭,用户就再也无法再其他机器上登录。 另外刷新的频率太短会对服务器造成过大的压力。 是不可行的。 频率太长又会导致意外关闭网页后用户等待时间长。 
     还是和需求部门研究一下。 出发点是什么是不是可以改变一种方式来解决