从我托管的Asp.Net网站获取IIS的运行会话数

我在IIS 6.0中托管Asp.Net网站

我们必须在web.config中重置会话超时

我的客户希望我只有在没有会话正在运行时才重置它(没有人使用该站点)。

我们没有使用Membership,SessionState设置为InProc

我如何知道是否有人使用该网站或任何会话正在运行。

我无法在托管网站中的源代码或除web.config之外的任何其他文件中进行更改。

我在PowerShell上并不擅长,所以希望你能找到合适的语法。 但……

一种选择是运行Powershell脚本并检查会话计数,如下所示:

更新:将“会话总数”更改为“会话有效”

write-host Getting performance counters ... $perfCounterString = "\asp.net applications(__total__)\sessions active" $counter = get-counter -counter $perfCounterString $rawValue = $counter.CounterSamples[0].CookedValue write-host Session Count is $rawValue if( $rawValue -gt 0) { write-host Session are active - will not stop IIS exit } write-host Stopping IIS stop-service "IISAdmin" # Set values $webConfig = "d:\web.config" $newTimeout = "20" # Open file and change value $doc = new-object System.Xml.XmlDocument $doc.Load($webConfig) $doc.SelectSingleNode("//sessionState").timeout = $newTimeout $doc.Save($webConfig) write-host Starting IIS start-service "IISAdmin" write-host Done! 

将其作为“ChangeIIS.ps1”保存在桌面上。

现在Powershell不喜欢你只运行像.bat文件这样的脚本。 出于安全原因,您必须授予对进程或用户的访问权限。 所以做以下事情:

  1. 打开命令提示符并以管理员身份运行
  2. 输入powershell
  3. 键入Set-ExecutionPolicy -scope process Bypass
  4. 键入sl sl [set-location]就像命令提示符中的cd一样
  5. 输入$ '.\ChangeIIS.ps1'

它将立即运行并重置该值。

以下是我的博客链接,其中介绍了我如何以更加循序渐进的方式创建PowerShell脚本

检查您站点的IIS日志文件,并查看最后一次点击的时间(由实际用户而不是搜索机器人)。

如果最后一次命中的时间早于当前会话超时,则不存在活动会话。 这就是你真正想要的,而不是计数。

无需编程或黑客攻击。

如果有人正在使用网站,嘿会话超时不会执行

所以不用担心

(Timeout属性指定分配给应用程序的Session对象的超时时间,以分钟为单位。如果用户在超时期限内未刷新或请求页面,则会话结束。

与IIS的会话http://msdn.microsoft.com/en-us/library/ms525473(v=vs.90).aspx

会话与配置文件http://msdn.microsoft.com/en-us/library/ms178586.aspx

我认为这里的简单答案是不可能”..你活着就学习了,看看ASP.NET性能计数器上的答案。 我对它的效果非常感兴趣(如果它对您有用),并且它是否为您提供了特定于应用程序的数据(与盒子上所有应用程序的汇总相比?)。

即使是查看日志文件的建议也无法满足您的需求 – 当您查看日志文件时,您如何知道没有用户启动会话?

会话是浏览器的cookie。 因此,如果访问您网站的1页,我会离开您的网站并转到其他网站,然后回来(在您设置的任何超时值之前)? 你会如何定义? 在我离开您的网站时,您将看不到“任何”活动(无论您使用什么监视器),但这并不意味着我的会话“已过期”。

它甚至不必那么复杂 – 我访问您的网站,并开始阅读您的内容(不导航,不做任何可以测量/监控的事情)。

我想“目标”需要更清晰 – 就像你追求的是什么? 重置的目标不是您想要实现的目标。

更新:

我知道您说您无法修改源代码,因此您可以希望它实现Google Analytics。 如果是这样,您可以查看您网站的实时活动。 这至少会让你以某种微不足道的方式“某处”。 同样,“魔术”基于cookie (因此意味着它仍然受我上面提出的问题的影响)

在会话开始和会话结束事件中继续增加和减少应用程序变量。 然后你会有会话计数。 如果sesson count为零,那么你可以重置该东西。 祝一切顺利。