当前位置:首页 > 知道中心 > ASP > 文章

一些Asp技巧和实用解决方法

发表于:2013-09-04| 次阅读| 作者:藕码网
TAG: asp
摘要:一些Asp技巧和实用解决方法
随机数: 
  <%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)")

   在做一个在线交流的网站时,有个问题很令我头疼,就是关于实时统计在线用户的问题,客户要求:统计当前在线人数、游客人数、会员人数、在线用户列表,包括游客、会员和管理员(如果是游客,则自动生成游客的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上调试通过,由于本方案对系统要求比较大,期待其他朋友拿出更好的方案,一起解决这个问题!



注:本站部分信息可能源于互联网分享,如有侵权,请告知,我们将及时删除!

推荐文章