讨论一下如何显示在线人数,还有所在页面,我有个思路,大家给点意见?我没有试过 建一个表存储用户状态的表,然后用AJAX在JS里LOAD和onbeforeunload时进行数据库的操作,不知道这样可以不可以?????大侠给指导指导!!能给出相关的代码最好 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的想法就是在LOAD的时候写入数据(用户和所在页面),然后在beforeunload删除,因为JS不能操作服务器端,现在好象只要用AJAX 当然还可以用Session和Application,这个问题的重点是AJAX和JS的LOAD BEFOREUNLOAD 其实不需要用AJAX,.Net不是有Load和OnUnload的事件吗? 倒奶cms完全满足http://dnetcms.anyp.cn/ 是啊,可以用OnUnload事件处理 .NET是有Load和OnUnload的事件吗,但是我试过OnUnload好象没有什么效果,而且你想如果是你点了页面的某个按扭,OnUnload事件也是会被触发。 那是因为.net按钮会Post页面的原因,所以才会触发OnUnload事件,你可以用IsPostBack判断以下哦 http://www.gzgov.net/qq/index.htm?QQ=285985那里兄弟帮我点一下,十分感谢 问题没有你想的那么简单,你现在的思路是不能精确记录在线人数的,要想精确记录在线人数,举个例子,比如聊天室显示在线人数,当用户输入妮称登陆后,服务器用Application变量记录在线人数加一,并把该用户记录到指针链表中(如果是用了没有指针链表的语言可以用数组来代替,如asp),客户端网页在关闭浏览器的时候可以通过onunload事件和判断鼠标位置的方法判断是否是关闭浏览器,在该事件中调用Ajax方法告诉服务器该用户已经退出了,在线人数减一,客户端的代码如下:<SCRIPT event="onunload" for="window"> if(window.event.clientX<0) { //是关闭浏览器 PublicAjax.KinExit('<%=Request.QueryString["MeetingID"].ToString()%>','<%=Session["feeMobile"].ToString()%>','<%=Session["StudentName"].ToString()%>'); //Ajax方法告诉服务器该用户已经退出了,在线人数减一 }</SCRIPT>这是我以前写的一写代码到此很多人以为就做完了,其实这还是不能精确记录在线人数的,因为在某人网络断线的情况下,服务器是不知道该用户已经下线了的,解决的办法如下:客户端定时给服务器发包,在服务器上建一个时间链表,该时间链表记录每个用户的上一次的定时发包时间,然后服务器定时检测该时间链表,如果检查到某用户在规定的时间内没有发包到服务器就证明该用户已经断线了。只有这样才能精确记录在线人数 TO:Cassava(车超)首先谢谢你,看了你文章胜读10年书,但是我还有几个疑问:象你这样好象不能记录用户所在的页面 ,然后就是在客户端定时给服务器发包怎么实现?还有就是我在LOAD来进行写入用户的位置有什么不妥?? 定时给服务器发包function Window_Load(){ window.setTimeout("Refresh()",20000); }function Refresh() { PublicAjax.Refresh("<%=MeetingID.Text%>"); //这里就是调用Ajax方法给服务器发包了 window.setTimeout("RefreshSMS()",20000); //20秒刷新一次}记录用户所在的页面,把上面的Refresh函数改一下function Refresh() { PublicAjax.Refresh("你页面的名称"); //这里就是调用Ajax方法给服务器发包了 window.setTimeout("RefreshSMS()",20000); //20秒刷新一次}现在服务器不就可以通过Refresh函数的参数知道用户所在的页面了吗 可以参考我的思路去做,逻辑很清楚地!http://www.xshweb.com/Article/108/10806.html 为什么我的Login空间不能居中呢?在IE8中 关于搜索数据 怎么连接不了SQL数据库的? 判断上传文件类型的问题? 如何dispose掉当前所有的对象??? 组件问题 对象的当前状态使该操作无效...急急急~ ASP.NET防止SQL注入 DataList控件内的条件判断问题 关于gridview的使用,菜鸟被卡一整天了... 用cookie实现。。 请教一段ASP的程序,转换成.NET的,应该如何写?
http://dnetcms.anyp.cn/
那里兄弟帮我点一下,十分感谢
客户端网页在关闭浏览器的时候可以通过onunload事件和判断鼠标位置的方法判断是否是关闭浏览器,在该事件中调用Ajax方法告诉服务器该用户已经退出了,在线人数减一,客户端的代码如下:
<SCRIPT event="onunload" for="window">
if(window.event.clientX<0)
{
//是关闭浏览器
PublicAjax.KinExit('<%=Request.QueryString["MeetingID"].ToString()%>','<%=Session["feeMobile"].ToString()%>','<%=Session["StudentName"].ToString()%>'); //Ajax方法告诉服务器该用户已经退出了,在线人数减一
}
</SCRIPT>
这是我以前写的一写代码
到此很多人以为就做完了,其实这还是不能精确记录在线人数的,因为在某人网络断线的情况下,服务器是不知道该用户已经下线了的,解决的办法如下:
客户端定时给服务器发包,在服务器上建一个时间链表,该时间链表记录每个用户的上一次的定时发包时间,然后服务器定时检测该时间链表,如果检查到某用户在规定的时间内没有发包到服务器就证明该用户已经断线了。
只有这样才能精确记录在线人数
首先谢谢你,看了你文章胜读10年书,但是我还有几个疑问:象你这样好象不能记录用户所在的页面 ,然后就是在客户端定时给服务器发包怎么实现?还有就是我在LOAD来进行写入用户的位置有什么不妥??
function Window_Load()
{
window.setTimeout("Refresh()",20000);
}
function Refresh()
{
PublicAjax.Refresh("<%=MeetingID.Text%>"); //这里就是调用Ajax方法给服务器发包了
window.setTimeout("RefreshSMS()",20000); //20秒刷新一次
}记录用户所在的页面,把上面的Refresh函数改一下
function Refresh()
{
PublicAjax.Refresh("你页面的名称"); //这里就是调用Ajax方法给服务器发包了
window.setTimeout("RefreshSMS()",20000); //20秒刷新一次
}现在服务器不就可以通过Refresh函数的参数知道用户所在的页面了吗