讨论如何更有效实现统计当前在线会员数

hsower 2006-07-29 06:29:08
我想构建一个会员系统,其中有一个显示当前在线会员的功能,问题是如何更有效地实现这一功能.
当用户触发Session_OnStart事件时,把用户相关信息写入XML文件做为缓存,当用户Session_OnEnd事件时删除相应的记录,这样做似乎可以比较高效地实现,但有没有什么蔽端?
另外,当用户Session过期时,会触发Session_OnEnd事件吗?

这种方式要用到Glaobl.asa文件,出于安全性考虑,我不想使用这种方法,有其它可行的方式吗?
主要是如何获取用户Session过期或Abandon,做出相应该的删除记录.

大家讨论一下嘛.
...全文
110 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞驰的青蛙 2006-07-30
  • 打赏
  • 举报
回复
学习
leohuang 2006-07-29
  • 打赏
  • 举报
回复
common.asp内容,把这个页include 到每个页
<%

dim conn
set conn = Server.CreateObject("ADODB.Connection")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("#数据库.mdb")

if session("UserName")<>"" then '如果用户已经登录
sql="update OnlineUsers set LoginDate=now() where UserName='" & Session("UserName") & "'"
conn.execute(sql)
end if
%>

<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>



OnceOnline.asp内容


<%
dim conn
set conn = Server.CreateObject("ADODB.Connection")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("#数据库.mdb")

if session("UserName")<>"" then '如果用户已经登录
sql="update OnlineUsers set LoginDate=now() where UserName='" & Session("UserName") & "';delete from OnLineUsers where Datediff('s',LoginDate,now())>15"
conn.execute(sql)
end if
conn.execute("delete from OnlineUsers where Datediff('s',LoginDate,now())>60")
conn.close
%>


原理就是上来用户就刷新现在的时间,隔10秒刷一次,超过15秒(根据自己设定)的就删除
这样基本上就是在线人数了

28,404

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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