zoukankan      html  css  js  c++  java
  • 不用global.asa讨论一下ASP在线人数统计的好方法.

     

    ASP中统计在线人数的方法花样繁多,我也搞不清楚有几种 ^_^,偶这里介绍三种先,如有错误,欢迎各位批评指正,还有好方法,敬请补充!

    首先介绍一种最简单的方法,利用 Application、 session 和 Global.asa ,因为当用ASP制作的网页都存放与WWW服务器的基点目录并且WWW服务器启动之后,每当有对ASP文件的HTTP请求时,服务器都会去读取基点目录下的Global.asa文件。所以可以在 Global.asa 文件中包含如下代码:

    <%

    '---------定义变量

    dim rstj

    dim ip

    dim timeouted

    dim x

    dim conntj

    dim dbpath

    '---------定义变量结束

    '---------建议数据库链接
    set conntj=server.createobject("adodb.connection")

    DBPath = Server.MapPath("count.mdb")

    conntj.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath

    '---------建立数据库链接完成

    '---------新建数据库rstj对象

    set rstj = server.createobject("adodb.recordset")

    '---------建立数据库rstj对象完成

    '---------读取客户端IP地址

    ip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") '若是对方使用的是代理服务器上网的话,用Request.ServerVariables("HTTP_X_FORWARDED_FOR")可以得到对方的真实IP,若对方不是通过代理服务器上网的话,则IP的值为空

    If ip = "" Then ip = Request.ServerVariables("REMOTE_ADDR") '如果IP的值为空,则得到他的本地客户端地址

    '---------IP读取完毕

    '---------读出数据库内近20分钟所加入的新内容数,group by ip-表IP值相同的记作1

    sql="select ip from count where posttime >= dateadd('n',-20,now()) group by ip"

    rstj.Open sql,conntj,1,1

    online=rstj.RecordCount

    rstj.Close

    '---------得到在线人数值

    '---------查看数据库中是否已经有相同的值,没有则 x="yes"有则x="no"

    sql="select ip from count where ip='" & ip & "'"

    rstj.Open sql,conntj,1,1

    if rstj.eof and rstj.bof then

    x="yes"

    else

    x="no"

    end if

    rstj.close

    '--------判断完毕

    '--------如果数据库中没有相同的值则加入一个新值

    if x="yes" then'   如果没有这个IP则增加一条记录

    sql="select top 1 * from count"

    rstj.Open sql,conntj,1,3

    rstj.AddNew

    rstj("ip")=ip

    rstj("posttime")=now()

    rstj.update

    rstj.close

    else '如果有这个IP则把时间改为现在的时间

    sql="select * from count where ip='" & ip & "'"

    rstj.Open sql,conntj,1,3

    rstj("posttime")=now()

    rstj.update

    rstj.close

    end if

    '--------判断加入完毕

    '--------删除20分钟以前所加入的值

    timeouted = dateadd("n", -20, now())

    sql="delete * from count where posttime < #" & timeouted & "#"

    conntj.Execute sql

    '--------删除完毕

    '--------关闭数据对象

    set rstj=nothing

    conntj.Close

    set conntj=nothing


    %>

    document.write('当前人在线<%=online%>人');

    调用方式如下,在你要显示的地方插入如下代码(注意路径一定要写对哦!):

    引用:

      

    <script language=“javascript” src=“online.asp”></script>

  • 相关阅读:
    Windows 命令行
    建议博客园提供 BT 资源发布功能——由分享 VS2005 Beta2 的历程想到的
    成功 自信 快乐(转载)
    轻松一下,加菲猫语录
    COmega 概述
    对 RBAC 几种模型的理解及初步实现构想
    DHTML 中滚动条的设置
    求婚
    终于有了自己的blog!
    VS2005 已发布!
  • 原文地址:https://www.cnblogs.com/hfzsjz/p/1719182.html
Copyright © 2011-2022 走看看