谁能讲一下在线名单的原理?》??

lio_sy 2003-09-14 02:21:42
谢谢啊
...全文
27 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lions911 2003-09-14
  • 打赏
  • 举报
回复
很多网友都问如何制作社区的在线人员显示问题,这也是个老大难的问题。由于笔者已经学习和实践了这些方面的编程已经有很长一段时间了。不说是有技术,也算是有些经验了,在这些问题解决方面我也曾遇到比较多的问题,后来总是解决了。
  这次和大家讲的不关是一个程序的代码实现,而更重要的就是一个原理和思想问题,因为如何大家都知道这个该如何去做的话,就不存在技术上的难题了,而只是一个语法上的不熟罢了。
  其实判断用户是否登录很简单,只要在登录的程序加上 "把用户设为在线" 就行了,这可以用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"来调用在线的用户了,然后显示出来当然也没问题了。呵。。。
  也许有的朋友会有更好的方法,欢迎发表出来和大家共同进步吧。如果有什么问题的话,也可以来我的社区里讨论讨论吧。http://luyu.net

10,606

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧