查看网页的所有人的客户视图
首先让我说,我对这个问题真的感到毫无方向。我正在使用Windows集成安全性,并且可以使用vb.net从AD查找有关用户的信息。我还可以获得有关用户的其他信息,这些用户可以通过获取登录身份名称从MS SQL 2005服务器中查找。
我想做的是向正在查看该网页的任何用户显示有关所有正在积极查看该网页的用户的信息。该信息来自AD和SQL,并且检索它没有问题。
到目前为止,我的路线一直是在用户首次加载页面时使用SQL进行存储。我被困在不知道用户离开页面时如何显示。我尝试使用ajax计时器每隔一秒钟更新一次用户访问的时间戳,这还会触发该表将状态更改为5秒内未更新的任何记录的无效状态。这仅适用于少数用户,但是我发现当有很多人查看该页面时,一秒钟的更新是不可靠的。当用户最小化页面时,我似乎也有问题。有时这会停止来自Ajax计时器的更新,并在用户仍在查看页面时将其从列表中踢出。
该功能对于将要运行的网站的功能并不重要,因此我在一年前就放弃了。从那以后,我一直想不出一种方法来完成这项工作,这让我感到非常痛苦。我的搜索使我走了许多徒劳的道路,因此,即使这只是正确方向的线索,我也将不胜感激。
解决方案
我认为最好的办法是为"访问页面"设置一个阈值。每60、120、300或者一定秒数运行一次自动化任务,以清除所有早于指定时间的条目。没有办法可靠地检测(我知道)用户何时离开页面。最好的办法是,如果经过一定时间,则"假设"用户已停止使用该网站。因此,我们将存储用户,页面和查看时间。观看时间超过阈值后,将其删除。
对于主体,请使用onunload脚本:
<body onunload =" userLeftPage()"
在该脚本中,发送一个ajax调用以说用户离开了页面。
我认为每秒发送一次AJAX请求不是一个好主意,它太健谈了。
我认为大多数人只是通过记录有人在何时向站点发出请求,然后从那个时间到"阈值",即用户正在"访问"站点来实现此功能。如果用户在达到"阈值"之前没有提出其他服务器请求,那么我们认为他们已经继续前进。
如何在页面上安装一个微型Flash应用程序,该应用程序可以从服务器流传输微小的"心跳"数据流……恰好足以使服务器知道何时丢弃了流,从而知道了客户端何时离开从页面上。
答案可能取决于我们需要的显示精度。如果只是为了让用户对使用该网站的其他人有所了解,我建议我们使用与我们所描述的内容类似的内容,但不建议更新频率:
- 在页面请求上将用户与页面(和时间戳)相关联
- 使用Ajax计时器每分钟左右更新一次时间戳
- 通过window.onbeforeunload事件(或者类似事件)终止关联
- 假设任何超过一分钟(和一点点)的时间戳都已消失
我们可以尝试捕捉人们离开页面的某些方式,但这绝不是防弹的。关于最小化的页面,我想他们是否真正在浏览页面是有争议的;)
第一个答案有效。
但...
我们没有提到用户已登录,所以我怀疑这不是我们正在查看的内容。但是,如果仅每分钟左右请求一次已登录用户的列表,则可以肯定地简化事情。