日期:2014-05-18  浏览次数:20850 次

如何在jsp或者servlet中获取所session数量
就是想做一个在线用户统计的功能
想获得所有session   的数量,一共有多少个人在线
请问各位高手如何获取呀

------解决方案--------------------
用ASP,PHP,JSP等来实现在线人员名单的显示的实现原理  
  很多网友都问如何制作社区的在线人员显示问题,这也是个老大难的问题。由于笔者已经学习和实践了这些方面的编程已经有很长一段时间了。不说是有技术,也算是有些经验了,在这些问题解决方面我也曾遇到比较多的问题,后来总是解决了。
  这次和大家讲的不关是一个程序的代码实现,而更重要的就是一个原理和思想问题,因为如何大家都知道这个该如何去做的话,就不存在技术上的难题了,而只是一个语法上的不熟罢了。
  其实判断用户是否登录很简单,只要在登录的程序加上 "把用户设为在线 " 就行了,这可以用SQL的update来做也可以用其他的如对文本文件的追加来做。如何登录时是设置的可以COOIKE登录的话,你只要在浏览页面或是发表贴子等的页面,进行更新也可以。
  其实网友认为难的就在于如何知道用户已经离开社区了。下面有几个初学网友会犯的错误。
  错误方法一: 当然有的网友会做在社区里做个 "退出社区 " 可有的用户比较忙或是手比较快,就会直接的关闭浏览器了。那么在程序看来此用户根本就没有退出社区。
  错误方法二: 为了这样也有的网友以关闭浏览器为标准,例如每当用户直接关闭浏览页面时,用JavaScript执行一个unload事件,跳出一个窗口,来执行相就在的更新,这也许是解决直接关闭的问题。可是网友没有考虑到如果因为贴子或文章太长,用户想断了线后,再好好的看看,那么他正好是直接断线后,看完所有贴子或文章再关闭浏览器的呢。此时跳出窗口页面的程序就等于没有执行。
  错误方法三:使用session为例,一般的服务器中都有Session的失效时间,如IIS中为20分钟,有的网友以Session为标准,来判断,这显然也是行不通的,结果会和错误方法二一样。
  那么如果才是正确的方法呢。到现在为此还没有一种方便的和精确的方法,除非你用Job事务来做,当那几乎是不可能的,因为免费的,即使是收费的主页空间也不会让你这么做的。所以只能能过普通的命令来实现了。
不过它的局限性就在于不能精确,但是我们可以让他更加的接近于精确。
下面我们会以IIS环境下的SQL SERVER服务器为例子。其他的如PHP+MYSQL,JSP+MS SQL SERVER等举一反三,几乎语句都不用怎么变。
  例子中采用程序片段,例如用户在表users中,除了基本要有的用户名字段(name)等,要有online字段,可以用bit类型就可以了。还要有一个登录时间的字段logintime,和最后操作时间的字段logouttime,都为datetime类型。详细的作用我们会在后面谈到。
  首先在用户登录进入时,要生成一个Session( "name ")字段的值,或是cookies( "club ")( "name ")的值,以便于在进行操作时,让SQL在社区中任意页面都知道是哪个用户的记录。接着更新用户的下online字段和logintime字段,语句如下:
  conn.execute( "Update users set online=1,logintime= ' "&now& " ' where name= ' "&session( "name ")& " ' ")
  这条语句的作用在于当用户登录时,就把用户在线设为真,再把当前操作时间设为现在。其次在用户进行贴子或文章浏览时,也要用此语句,因为这样才可能更加的准确些。
在这些语句的后面再加上一句。
  conn.execute( "Update users set online=0 where diffdate( " "n " ",logintime, ' "&now()& " ')> 10 ")
  这条语句的作用表示把用户最后操作时间和当前时间相比较,如果大于10分钟的话,就会把这些用户都设为离线。
  好了,其实关键的也就是这两条语句而以,是不是很简单?说了这么多,其实想让大家了解的就是实现的原理,而不是什么代码。相信大家现在也可以很简单的做出关于PHP+MYSQL和JSP+数据库的在线人员显示的程序来了。
  最后可以用 "select name from users where online=1 "来调用在线的用户了,然后显示出来当然也没问题了。呵。。。