检查是否有人正在使用ASP.Net应用程序(站点)

时间:2010-10-05 05:18:18

标签: asp.net iis session

我构建ASP.NET网站(通常在IIS 6下托管,通常使用SQL Server后端和表单身份验证)。

客户有时会询问我是否可以在给定时刻检查当前是否有人浏览(和/或当前是否有用户登录)他们的网站,通常这样可以安全地进行部署(他们想要一个修补程序,例如)。

我知道网络基本上是无状态的,所以我无法确定是否有人关闭了浏览器窗口,但我想有一些尚未定时的会话或其他东西,并且肯定会记录 - 在用户...

有没有标准和/或简单的方法来检查这个?

5 个答案:

答案 0 :(得分:1)

雅各布的answer是正确的,但依赖于安装和配置会员功能。

在线跟踪用户的粗略但简单的方法是在Application对象中存储计数器。该计数器可以在其会话开始和结束时递增/递减。在MSDN网站上有一个例子:

  

Session-State Events (MSDN Library)

由于默认会话超时为20分钟,因此无法保证此方法的准确性(但由于HTTP的无状态和断开连接,这适用于任何Web应用程序。)

答案 1 :(得分:1)

我知道这是一个非常古老的问题,但我想我会插话。为什么不使用Google Analytics并查看他们的实时信息中心?它将需要进行少量的代码修改(即单个脚本导入),并将完成您正在寻找的所有内容......

答案 2 :(得分:0)

你可能正在寻找Membership.GetNumberOfUsersOnline方法,虽然我不确定它有多可靠。

答案 3 :(得分:0)

其他用户建议的会话是一种基本的做事方式,但不太可靠。它们在某些情况下也可以很好地工作,但在其他情况下则不行。

例如,如果用户正在下载大文件或观看视频或收听播客,他们可能会在同一页面停留数小时(除非ASP跟踪对二进制数据的请求。 NET也),但仍在使用您的网站。

因此,我的建议是使用服务器日志来检测网站当前是否被许多人使用。它使您能够:

  • 查看完成了哪种请求。检测人类爬行器非常容易,并且凭借一些经验,还可以看到人类当前是否做一些关键的事情(例如在网站上撰写评论,编辑文档,或者输入她的信用卡号码和订购某些内容(如浏览)。
  • 请参阅正在执行这些请求的人。例如,如果Google正在抓取您的网站,那么离线是一个非常糟糕的主意,除非搜索评分对您无关紧要。另一方面,如果机器人试图通过向不同页面发出请求来破解您的网站两个小时,您肯定可以下线。

注意:如果一个网站有一些关键区域(例如,写这个长答案,如果Stack Overflow在我提交答案之前的几秒内脱机,我会很生气),你也可以发送常规的AJAX请求用户停留在页面上时的服务器。当然,在实现此类功能时必须小心,并考虑到它会增加使用的带宽,并且如果用户禁用了JavaScript,则无法工作。

答案 4 :(得分:0)

您可以运行命令netstat,查看您的网站端口存在多少活动连接。 http的默认端口是*:80。 https的默认端口是*:443。