文章探索:   分类:    关键字:  
  + 栏目导航
  + 相关文章
asp中有关字符编码转换的几个函数
绝妙的asp生成静态页面html函数
Asp计算页面执行时间
一个简单的用存储过程分页
将asp页面转换成htm页面
ASP网站漏洞解析及黑客入侵防范方法
URL编码与SQL注入
几种常用排序算法(asp)
ASP调用带参数存储过程的几种方式
实用的ASP连接数据库的函数
ASP如何获取真实IP地址
ASP中怎么实现SQL数据库备份、恢复
判断Cookies是否处于开启状态
怎样才能将服务器端文件夹下的文件,..
几行Asp代码实现防止表单重复提交
用ASP设计网站在线人数统计程序
asp论坛在线人数统计研究
如何用ASP远程在数据库中创建Table
用ASP调用SQL Server的视图和存储过程
Asp与XML的关系
ASP读取EXCEL
在ASP中使用Oracle数据库技巧
一个通过web.Mail发送邮件的类
几种打开记录集方式的比较
购物车范例(购物车页面 )
如何使用FSO搜索硬盘文件
GB码和BIG5码的互换技术
用ASP开发WEB日期选择器
一个投票系统的源程序(coveryourasp.c..
列出服务器上的打印机


技术教程 -> ASP教程 ->  
一些Asp技巧和实用解决方法
来源:转载   人气:916   录入时间:2007-11-8
     在做一个在线交流的网站时,有个问题很令我头疼,就是关于实时统计在线用户的问题,客户要求:统计当前在线人数、游客人数、会员人数、在线用户列表,包括游客、会员和管理员(如果是游客,则自动生成游客的ID,如果是会员,则显示会员姓名)。因为它要求有实时性,则首先我将用global.asa解决的想法pass掉。
    问题的关键是如何判断用户已经离开,和当用户离开时如何执行一个文件或一个函数。
    经过和网上一些朋友的探讨,终于解决了这个问题。
    解决的原理为:编写一个通用页面,所谓的通用页面,就是应用里的每个页面都包含这个页面,例如:header.ASP,在这个页面里,用XMLHTTP写一段代码,这段代码的作用是每隔10秒或20秒就向服务器发送一个请求,目的是更新当前用户的在线时间并删除在线时间超过一定时间的用户,使数据库中的在线用户记录保持一定的实时性。
    主要实现方法为:
    新建一数据库,字段名称分别为:id(字符),name(字符),user(数字)tt(日期),admin(权限代码,0-普通用户,1-管理员)
    表名:online
    header.asp ↓
    ============================================================
    <%
    ... ...
    if session("s_in")<>1 and session("s_name")="" then ’如果用户是第一次登陆
    rs.open "select * from online",conn,3,3
    rs.addnew
    rs("id")=session.sessionID
    rs("name")="游客" & session.sessionID
    rs("user")=0 ’0表示用户未登陆,是游客身份
    rs("tt")=now
    rs.update
    rs.close
    session("s_in")=1 ’设置用户的资料已经存入数据库,表示已经在线
    end if
    if session("s_name")<>"" then ’如果用户已经通过登录框登录
    rs.open "select * from online where id=’" & session.sessionID & "’",conn,3,3
    rs("name")=session("s_name")
    rs("admin")=session("s_admin") ’将用户的姓名更新为会员名称
    rs("user")=1 ’表示用户已经登陆,是会员身份
    rs("tt")=now ’将当前系统时间设置为用户的登陆时间
    rs.update
    rs.close
    end if
    ... ...
    %>
    ... ...
    <head>
    ... ...
    <script language=JavaScript>
    function Test()
    {
    var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
    xmlhttp.open("POST","onceonline.asp",false); // 向onceonline.asp发送更新请求
    xmlhttp.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");
    xmlhttp.send();
    }
    setInterval("Test();",10); // 10秒钟发送一次更新请求
    </script>
    ... ...
    </head>
    ... ...
    ==========================================================
    onceonline.asp
    <%
    rs.open "select tt from online where id=’" & session.sessionID & "’",conn,3,3
    rs("tt")=now() ’更新当前在线用户的在线时间
    rs.update
    rs.close
    rs.open "delete from online where datediff(’s’,tt,now())>60",conn,3,1 ’删除超时用户
    %>
   =============================================================
    这样,基本保证了数据库中用户列表的实时性,误差取决于更新时间和删除时间的差值大小和服务器的处理速度,建议不要将删除超时用户的时间间隔取的过于小,那样有可能会导致在线用户0人的失误。
    本方案在WIN2000+SQL Server2000上调试通过,由于本方案对系统要求比较大,期待其他朋友拿出更好的方案,一起解决这个问题!
   ===================================================
   随机数:
    <%randomize%>
    <%=(int(rnd()*n)+1)%>
    查询数据时得到的记录关键字用红色显示:
    <% =replace(RS("字段X"),searchname,"<font color=#FF0000>" & searchname & "</font>") %>
    通过asp的手段来检查来访者是否用了代理
    <% if Request.ServerVariables("HTTP_X_FORWARDED_FOR")<>"" then
    response.write "<font color=#FF0000>您通过了代理服务器,"& _
    "真实的IP为"&Request.ServerVariables("HTTP_X_FORWARDED_FOR")
    end if
    %>
    判断上一页的来源
    request.servervariables("HTTP_REFERER")
    JavaScript: document.referrer
    清除缓存,重新加载页面
    <%response.expires = 0
    response.expiresabsolute = now() - 1
    response.addHeader "pragma","no-cache"
    response.addHeader "cache-control","private"
    Response.cachecontrol = "no-cache"
    %>
    在下拉菜单中显示年和月
    <select name="select">
    <%
    Dim M_Year
    Dim M_Month
    Dim M_MonthJ
    Dim M_TheMonth
    Dim M_YM
    For M_Year = 2000 To Year(Date)
    M_Month = 12
    If M_Year = Year(Date) Then
    M_Month = Month(Date)
    End If
    For M_MonthJ=1 To M_Month
    If M_MonthJ < 10 Then
    M_TheMonth = "0" & M_MonthJ
    Else
    M_TheMonth = M_MonthJ
    End If
    M_YM = M_Year& "-" & M_TheMonth %>
    <option value="<%= M_YM %>"><%= M_YM %></option>
    <%
    Next
    Next %>
    </select>
    检索并删除数据库里的重复记录
    conn.execute("delete from table where id not in (select distinct from table)")
   




Copyright(C)2007-2024 广州市佳沛数码科技有限公司 版权所有
公司地址: 广州市荔湾区东漖北路560号511室
电话:020-81803473 传真:020-81544987